金牌会员
 
- 积分
- 1790
- 金钱
- 1790
- 注册时间
- 2018-3-26
- 在线时间
- 294 小时
|
10金钱
HAL 库 串口3的使用,
- void USART3_Send_Data(u8 *buf, u8 len)
- {
- HAL_UART_Transmit(&UART3_Handler,buf,len,1000); //串口3发送数据
- while(__HAL_UART_GET_FLAG(&UART3_Handler,UART_FLAG_TC)!=SET); //等待发送结束
- }
- void USART3_IRQHandler(void)
- {
- u32 timeout=0;
- #if SYSTEM_SUPPORT_OS //使用OS
- OSIntEnter();
- #endif
-
- HAL_UART_IRQHandler(&UART3_Handler); //调用HAL库中断处理公用函数
- timeout=0;
- while (HAL_UART_GetState(&UART3_Handler) != HAL_UART_STATE_READY)//等待就绪
- {
- timeout++;////超时处理
- if(timeout>HAL_MAX_DELAY) break;
- }
-
- timeout=0;
- while(HAL_UART_Receive_IT(&UART3_Handler, (u8 *)Uart3_RxBuffer, UART3_RXBUFFERSIZE) != HAL_OK)//一次处理完成之后,重新开启中断并设置RxXferCount为1
- {
- timeout++; //超时处理
- if(timeout>HAL_MAX_DELAY) break;
- }
-
- #if SYSTEM_SUPPORT_OS //使用OS
- OSIntExit();
- #endif
- }
复制代码
串口3就一直发送127字节的数据,延时20ms以上
但是从PC的串口助手往 32 发送数据,就会导致死机,就一直卡在等待串口3状态的死循环里面
while (HAL_UART_GetState(&UART3_Handler) != HAL_UART_STATE_READY)//等待就绪
{
timeout++;////超时处理
if(timeout>HAL_MAX_DELAY) break;
}
问下hal库能调用DMA,或者其他高效一点的使用例程吗,麻烦分享借鉴一下。。。谢谢各位大哥了
|
最佳答案
查看完整内容[请看2#楼]
【阿波罗F429串口3(PB10/PB11)通信测试程序(HAL库版本)】
http://www.openedv.com/forum.php?mod=viewthread&tid=283756
【阿波罗H743_串口DMA接收及发送+空闲中断】http://www.openedv.com/forum.php?mod=viewthread&tid=293299
|