通过STM8L152的TIM1周期性触发ADC

wujialing 2017-03-31 04:06:33
在项目中需要通过TIM比较准确的控制ADC的采样周期,工作顺序是TIM1->ADC1->DMA->中断。使用STM8L152C6
现在的情况是使用tim1的TRGO触发ADC1,ADC无论如何都不能工作。贴上代码。
  /* Initialize and configure ADC1 */
ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_2);
//ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);

/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);

/* Enable ADC1 Channels 3 */
// ADC_ChannelCmd(ADC1, ADC_Channel_3, ENABLE); /* connected to Potentiometer RV */
/* Enable ADC1 Channels 24 */
ADC_ChannelCmd(ADC1, ADC_Channel_24, ENABLE); /* connected to BNC */
SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);

DMA_Init(DMA1_Channel0, BUFFER_ADDRESS,
ADC1_DR_ADDRESS,
BUFFER_SIZE,
DMA_DIR_PeripheralToMemory,
DMA_Mode_Circular,
DMA_MemoryIncMode_Inc,
DMA_Priority_High,
DMA_MemoryDataSize_HalfWord);

/* DMA Channel0 enable */
DMA_Cmd(DMA1_Channel0, ENABLE);

/* Enable DMA1 channel0 Transfer complete interrupt */
DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);

/* DMA enable */
DMA_GlobalCmd(ENABLE);

/* Enable ADC1 DMA requests*/
ADC_DMACmd(ADC1, ENABLE);
ADC_ExternalTrigConfig(ADC1,
ADC_ExtEventSelection_Trigger2,
ADC_ExtTRGSensitivity_Falling);
TIM1_SelectOutputTrigger(TIM1_TRGOSource_OC1);
TIM1_Cmd(ENABLE);


无论如何ADC都不会工作。经过分析定时器结果图发现了端倪,
从图中可以看到TIM1的TRGO输出只能到其他TIM,而没有输出到ADC

在STM32F103的手册中可以看到TIM的TRGO可以输出到ADC。因此可以工作。
...全文
431 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zchzch1014 2017-03-31
  • 打赏
  • 举报
回复
是的,一般不用高级TIMER来触发adc
wujialing 2017-03-31
  • 打赏
  • 举报
回复
已经解决,手册中说tim1可以trgo ADC,但是根据图的只能使用TIM2触发ADC,TIM1无法触发ADC。

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧