完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用最笨的方法可以实现,读取完DMA数据后,复位DMA和TIM1,下次采集脉宽信号后,再重新初始化DMA和TIM1。
|
|
|
|
为了解决这个问题,我们可以采取以下步骤:
1. 初始化TIM1和DMA:首先,我们需要初始化TIM1作为输入捕获模块,并配置DMA以将捕获的脉宽数据传输到全局变量中。 2. 配置中断:为了检测长时间无脉宽信号,我们需要配置一个定时器中断,该中断会在一定时间间隔后触发。在这个中断处理函数中,我们将检查全局变量中是否有脉宽数据。如果没有,我们将输出报警信号。 3. 清除脉宽数据:在DMA传输完成后,我们需要清除全局变量中的脉宽数据,以准备接收下一个脉宽信号。 4. 处理有效脉宽数据:当捕获到有效脉宽数据时,我们需要读取全局变量中的脉宽数据,并将其存储在一个单独的变量中。然后,清除全局变量中的数据,以便接收下一个脉宽信号。 5. 报警输出:如果定时器中断检测到长时间无脉宽信号,我们需要输出报警信号。 以下是实现这个功能的伪代码: ```c // 初始化TIM1和DMA Init_TIM1_Input_Capture(); Init_DMA_TIM1(); // 配置定时器中断 Init_Timer_Interrupt(); while (1) { // 检查是否有有效脉宽数据 if (Check_Valid_Pulse_Width()) { // 读取脉宽数据并存储在一个单独的变量中 Read_Pulse_Width(); // 清除全局变量中的数据 Clear_Pulse_Width_Data(); // 处理脉宽数据(例如,计算平均值、最大值等) Process_Pulse_Width_Data(); } else { // 如果长时间无脉宽信号,输出报警信号 Output_Alarm_Signal(); } } // 定时器中断处理函数 void Timer_Interrupt_Handler() { // 检查全局变量中是否有脉宽数据 if (!Check_Global_Variable_Data()) { // 输出报警信号 Output_Alarm_Signal(); } } ``` 通过这种方式,我们可以确保在长时间无脉宽信号时输出报警信号,同时在捕获到有效脉宽数据时清除DMA指定的存储空间。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
732浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
557浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 07:26 , Processed in 0.822986 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号