语音AI芯片、算法及配套解决方案提供商“启英泰伦”完成新一轮数千万元融资
06-17
打开两个定时器供FPGA使用的要求是: 1、定时器可以随时关闭,即使计数未满也必须停止。

2、定时器再次开启时可以从0开始计时。
3. 启动过程中可以停止定时器。
然后改变定时周期,从0开始计数。
几个主要函数 //tim_num=0对应定时器2,tim_num=1对应定时器3; tim_us:定时器美国编号 void stm32_timer_start(uint16_t tim_num,uint16_t tim_us){/* --------------------------------- ----------------- -------------PCLK1=36MHzTIM CLK = 72 MHz, Prescaler = 72, 72M/72=1M,即,计数为1S,即计数加1为1uS-------- ------------------------------ ----------------------- ----- *//* 时基配置 */ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; stm32_timer_stop(tim_num);TIM_TimeBaseStructure.TIM_Period = tim_us; //设置下一个更新事件中加载的活动自动重载寄存器周期的值以计数到msTIM_TimeBaseStructure .TIM_Prescaler =(72-1); //设置预分频值10Khz的计数频率用作TIMx时钟分频器 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分频:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIM 加计数模式 if(tim_num == 0){ TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时基单元 TIM_ClearITPendingBit(TIM2, TIM_IT_Upda特); //清除TIMx的中断挂起位:TIM中断源TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Single); //定时器一次性模式 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //使能中断 TIM_Cmd(TIM2, ENABLE) ; //启用TIMx外设} else if(tim_num == 1){ TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时基单元 TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx中断挂起位:TIM中断源TIM_SelectOnePulseMode(TIM3, TIM_OPMode_Single); //定时器单次模式 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //使能中断 TIM_Cmd(TIM3, ENABLE); //使能TIMx外部设置 } }//停止定时器 void stm32_timer_stop(uint16_t tim_num){ if(tim_num == 0) { TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); //关闭中断 TIM_Cmd(TIM2, DISABLE); //关闭TIMx外设} else if(tim_num == 1) { TIM_ITConfig(TIM3, TIM_IT_Update, DISABLE); //关闭中断 TIM_Cmd(TIM3, DISABLE); //关闭TIMx外设}}void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) ) != RESET){ //检查指定的TIM中断是否发生:TIM中断源 TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIMx的中断挂起位:TIMInterrupt source time_handlers[0]();//中断处理函数}}void TIM3_IRQHandler(void) { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){ //检查指定的TIM中断是否发生:TIM中断源 TIM_ClearITPendingBit ( TIM3、TIM_IT_Update ); //清除TIMx的中断挂起位:TIM中断源time_handlers[1](); //中断处理函数} } 无论是第一次启动定时器还是停止后打开定时器,都会调用stm32_timer_start函数来保证定时器停止后从0开始计数。
重置计数值后,定时器将立即按照新的计时值进行计数,即使不调用停止函数stm32_timer_start中的TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure)。
); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时基单元 TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断挂起位:TIM中断源 这两个函数不能互换,否则定时器不会被忽略 定时多长时间?一旦启动就会产生定时中断。
这次大概是对ADC调试STM32采集板进行uS的分压测试。
使用ADC采集数据,发现会有偏差,大约5%。
测量硬件电路后发现参考电压VDDA和VREF+均为3V,后来调整为3.3V,AD采样就不会出现偏差。
如有错误,欢迎评论并指正。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-17
06-17
06-18
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现