高级会员

- 积分
- 586
- 金钱
- 586
- 注册时间
- 2016-5-13
- 在线时间
- 106 小时
|
发表于 2018-1-29 16:23:47
|
显示全部楼层
就我目前使用的来看 DMA加串口空闲中断是最方便的,带IT的接收也可以参照原子的串口做,
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart==&huart2)
{
if(RS3485_RX_STA<RS3485_MAX_RECV_LEN)//还可以接收数据
{
RS3485_TIMEOUT=0;
if(RS3485_RX_STA==0)
{
RS3485_START=1;
}
RS3485_RX_BUF[RS3485_RX_STA++]=RS3485_IT_BUF[0];//记录接收到的值
}
else
{
RS3485_RX_STA|=1<<15;//强制标记接收完成
}
HAL_UART_Receive_IT(&huart2,RS3485_IT_BUF,1);
}
}
主程序初始化完 HAL_UART_Receive_IT(&huart2,RS3485_IT_BUF,1);
加一句这个打开接收中断就可以了 是用的超时接收10MS超时,配合一个定时器就可以了 |
|