完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
原因其实很多,
下面就是一个例子: 代码里面的"while(1)" 在ble的例程里面,如果使用内部32K RC时钟,在做RC时钟校准时,需要用到当前芯片温度的函数,函数如下: (该代码 位于CH573 EVT的EXAMBLEHALMCU.c 文件中,不同版本EVT 可能存在差异,下面代码来源于CH573 EVT 1.7 ) uint16 HAL_GetInterTempValue( void ) { uint8 sensor, channel, config, tkey_cfg; uint16 adc_data; tkey_cfg = R8_TKEY_CFG; sensor = R8_TEM_SENSOR; channel = R8_ADC_CHANNEL; config = R8_ADC_CFG; ADC_InterTSSampInit(); R8_ADC_CONVERT |= RB_ADC_START; while( R8_ADC_CONVERT & RB_ADC_START ) ; adc_data = R16_ADC_DATA; R8_TEM_SENSOR = sensor; R8_ADC_CHANNEL = channel; R8_ADC_CFG = config; R8_TKEY_CFG = tkey_cfg; return ( adc_data ); } 这里很明显,有个while, 如果,我们在别处更高优先级(比如中断)里使用了这个外设,恰好在 R8_ADC_CONVERT |= RB_ADC_START; 之后, while( R8_ADC_CONVERT & RB_ADC_START ) 之前 那么,当我们在回到这里后,由于硬件状态机已经被中断改变,可能就会出现while 永远不会跳出的现象了. 解决方式有两种: 1,上述代码加原子操作(执行开始前关闭全局中断,结束后开全局中断) 2,不要在中断中 使用ADC; |
|
|
|
|
只有小组成员才能发言,加入小组>>
350 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863 浏览 0 评论
1461 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3418 浏览 2 评论
2822 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1808浏览 1评论
1461浏览 1评论
350浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863浏览 0评论
468浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 12:39 , Processed in 0.647919 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1143