完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
HAL_UART_RxCpltCallback
这个回调函数在串口中断接收完成后会被调用,在DMA接收完成后也会被调用 那么能否在这个回调函数中直接以参数huart中的信息来区分上述两种情况呢?(不考虑其他外部附加处理方式) (实际使用情况是在rtthread中改用hal库适配原来的serial处理) |
|
相关推荐
1个回答
|
|
在HAL库中,`HAL_UART_RxCpltCallback` 回调函数确实会在串口中断接收完成和DMA接收完成后被调用。为了区分这两种情况,我们可以通过检查 `huart` 结构体中的一些参数来判断。
具体来说,我们可以检查 `huart->hdmarx` 是否为 `NULL`。如果 `hdmarx` 为 `NULL`,则表示当前的接收操作是通过中断完成的;如果 `hdmarx` 不为 `NULL`,则表示当前的接收操作是通过DMA完成的。 下面是一个示例代码,展示了如何在 `HAL_UART_RxCpltCallback` 回调函数中区分这两种情况: ```c void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->hdmarx == NULL) { // 通过中断完成的接收 // 在这里处理中断接收完成的操作 } else { // 通过DMA完成的接收 // 在这里处理DMA接收完成的操作 } } ``` 这种方法仅适用于在回调函数中区分中断接收和DMA接收的情况。如果需要在其他地方进行区分,可能需要使用其他方法,例如设置一个全局变量或标志位来记录当前的接收方式。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1090 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1107 浏览 1 评论
545 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
412 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
990 浏览 2 评论
1590浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
261浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
273浏览 3评论
243浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
237浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 03:29 , Processed in 0.544331 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号