STM32F030 485通讯遇到的问题

发布者:美好的人生最新更新时间:2019-07-27 来源: eefocus关键字:STM32F030  485通讯 手机看文章 扫描二维码
随时随地手机看文章

在做项目的时候要求用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);

}

}      

}


关键字:STM32F030  485通讯 引用地址:STM32F030 485通讯遇到的问题

上一篇:STM32的RS485调试过程记录
下一篇:RS485通信基础理论与STM32测试

推荐阅读最新更新时间:2024-11-09 12:16

STM32F030 ADC DMA乱序问题
问题描述 通过 uint16_t ConvData 保存DMA搬运的ADC转换数值,但是这个数组数值的顺序总是和ADC不是顺序对应的。比如用7个通道的ADC,当设置ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward,是对应顺序是:0- 0,1- 7,2- 6…7- 1 ; 当设置ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward,是对应顺序是:0- 7,1- 0,2- 1…7- 6 。 问题原因 F0的ADC在使用之前需要校准。这个7位的校准值也是放在ADC_DR中
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved