在做项目的时候要求用485进行主机与从机进行通讯,在485发送和接收的时候要对驱动器进行控制,在刚开始调发送和接收的时候总是失败,原因有一下几个
使能驱动器后立刻发送数据,导致第一个数据有时候错误。
串口中断后马上控制驱动器为发送模式,然后发送数据,导致出错,有时直接卡死。
3.在发送指令后马上接收有时候串口溢出标志位会置位,原因不明,通过在错误中断清除标志位来处理。
4.在进入错误中断后读取串口的ISR寄存器后要延时一段时间才能清除标志位,不然无法清除。
5.STM32F0为M0的内核,中断分组和M3,M4的不同,只有抢占,怎么区分优先级现在还不明。
在错误中断中清除标志位的方法
/**
* Description:串口错误回调函数
* Parameter :USARTX_Handler 串口句柄
* Return :None
* Others :串口接收出错进入此函数
* :
*/
void HAL_UART_ErrorCallback(UART_HandleTypeDef *USARTX_Handler)
{
uint8_t c;
c = USARTX_Handler->Instance->ISR;
for(int i;i<10000;i++);//读取SR寄存器后要延时一段时间,否则无法进入下面的判断
//printf("GG");
if((__HAL_UART_GET_FLAG(USARTX_Handler, UART_FLAG_PE))!=RESET)
{
READ_REG(USARTX_Handler->Instance->RDR);//PE清标志,第二步读DR
READ_REG(USARTX_Handler->Instance->TDR);//PE清标志,第二步读DR
__HAL_UART_CLEAR_FLAG(USARTX_Handler, UART_FLAG_PE);//清标志
}
if((__HAL_UART_GET_FLAG(USARTX_Handler, UART_FLAG_FE))!=RESET)
{
READ_REG(USARTX_Handler->Instance->RDR);//FE清标志,第二步读DR
READ_REG(USARTX_Handler->Instance->TDR);//PE清标志,第二步读DR
__HAL_UART_CLEAR_FLAG(USARTX_Handler, UART_FLAG_FE);
}
if((__HAL_UART_GET_FLAG(USARTX_Handler, UART_FLAG_NE))!=RESET)
{
READ_REG(USARTX_Handler->Instance->RDR);//NE清标志,第二步读DR
READ_REG(USARTX_Handler->Instance->TDR);//PE清标志,第二步读DR
__HAL_UART_CLEAR_FLAG(USARTX_Handler, UART_FLAG_NE);
}
if((__HAL_UART_GET_FLAG(USARTX_Handler, UART_FLAG_ORE))!=RESET)
{
READ_REG(USARTX_Handler->Instance->CR1);//ORE清标志,第二步读CR
READ_REG(USARTX_Handler->Instance->TDR);//PE清标志,第二步读DR
__HAL_UART_CLEAR_FLAG(USARTX_Handler, UART_FLAG_ORE);
__HAL_UART_CLEAR_OREFLAG(USARTX_Handler);
if(USARTX_Handler->Instance == USART1)
{
HAL_UART_Receive_IT(USARTX_Handler,&USART1_RxBuffer,1);
}
else if(USARTX_Handler->Instance == USART3)
{
HAL_UART_Receive_IT(USARTX_Handler,&USART3_RxBuffer,1);
}
else if(USARTX_Handler->Instance == USART5)
{
HAL_UART_Receive_IT(USARTX_Handler,&USART5_RxBuffer,1);
}
}
}
上一篇:STM32的RS485调试过程记录
下一篇:RS485通信基础理论与STM32测试
推荐阅读最新更新时间:2024-11-09 12:16
设计资源 培训 开发板 精华推荐
- 用于视频/成像的视频开关
- DC2069A、LT8490 演示板、高效 MPPT 降压-升压型电池充电器控制器 17V 至 54V,高达 200W 太阳能电池板输入电压。 12V SLA 电池,充电电流高达 16.6A
- 当 LTC2379CDE-18 中启用数字增益压缩时,使用 LT6350 的典型应用被配置为接受 ±10V 输入信号,同时运行一个 5.5V 单电源
- DER-409 - 8.5W PFC TRIAC可调光非隔离降压-升压LED驱动器,适用于A19灯泡
- Arduino nano Type-C 最小系统板
- 电赛源码 智能家居管理系统
- 使用 NXP Semiconductors 的 TEA1566S 的参考设计
- 使用 Infineon Technologies AG 的 TLE6240GP 的参考设计
- BATT-14CEMULATOR: 为MC33771 EVB供电的14节电池组模拟器
- RT9161 300/500mA低压差线性稳压器典型应用
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车
- 英特尔中国正式发布2023-2024企业社会责任报告
- can转485数据是如何对应的
- MCU今年的重点:NPU和64位