买了原子哥的开发板已经一个月勒,目前还是个小白。
发现这个STM32还是蛮难的,各种参数之间的关系搞的晕头转向的。。。
最近在看ADC这个东西,我输入一个电压信号,用ADC也采集到了,采到的值也是对的。
现在我想要在这基础上增加一个TIM定时功能,每隔一小段时间读一个ADC的值。然后就没有然后了,搞了一天多还没搞定,网上也没查到我想要的,所以特来论坛向大神们请教
下面这个是TIM3的初始化
void Timer_Configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Prescaler = 36000-1; //2k的计数频率
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 500-1; // 计数到500产生一个更新事件
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //允许更新中断
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
下面这个是TIM3的中断函数,我就想每隔一段时间读一下ADC的值,不要刷新的太快而已。
void TIM3_IRQHandler(void)
{
u16 ad_value1;
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检测是否发生溢出更新事件
{
ad_value1=ADC_RegularConvertedValueTab; //我就想在每次中断的时候读一下ADC的值,这里是不是不对啊。。。
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除中断标志位
}
下面是之前的main函数,我仿真的时候能看到ADCzhi在一直变化。
u16 ADCzhi;
while (1)
{
ADCzhi=ADC_RegularConvertedValueTab; //
ADC_RegularConvertedValueTab表示ADC的值
}
ADC的那一段函数就不贴上来了,感觉那个好像没什么问题。
大神们给我指点一下吧。。。不胜感激啊
---------------------------------
原子哥的代码也有不完善的地方。这是其中之一。
我觉得做实验先看下原理,理解了之后再自己思考看能写出自己的代码么,再对照例程看看自己的不足之处在哪,例程里面有什么值得学习借鉴的地方。
哪些地方你做的比例程还要好。这样能学到的更多,理解得更深。不过这要以花更多的时间作为代价。
---------------------------------
TIM_Cmd(TIM3, ENABLE); //使能TIM3
TIM_ClearFlag(TIM3, UPdate)
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //允许更新中断
大哥,按照20楼的1、2、3顺序,是不是这样的代码啊。可是我看别人代码都是把
TIM_Cmd(TIM3, ENABLE); //使能TIM3
这句放在最后的呀。第一行和第三行能换下位置不
---------------------------------
使能后就立即产生中断,你要是最后打开定时器,就又中断了。前面的清零白清了。
是否对,你做个测试就知道了,实验最可靠也最深刻。
---------------------------------
恩,。好的。
一周热门 更多>