历史上的今天
返回首页

历史上的今天

今天是:2025年07月27日(星期日)

正在发生

2019年07月27日 | STM32F030 485通讯遇到的问题

2019-07-27 来源:eefocus

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

}

}      

}


推荐阅读

史海拾趣

Crameda Intersys公司的发展小趣事

作为一家有社会责任感的企业,Crameda Intersys公司不仅关注自身的经济效益,还积极履行社会责任。公司积极参与公益事业,支持教育、环保等领域的发展。同时,公司还注重环保和可持续发展,通过采用环保材料和节能技术,降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,也为社会的可持续发展做出了积极贡献。

这五个故事只是Crameda Intersys公司发展历程中的一部分,但它们足以展现出公司在电子行业中的成长轨迹和不懈追求。在未来的发展中,Crameda Intersys公司将继续以技术创新为引领,积极拓展市场渠道,培养更多优秀人才,加强质量管理和社会责任履行,为电子行业的发展贡献更多的力量。

DAQ Electronics LLC公司的发展小趣事

在DAQ Electronics LLC公司的发展过程中,技术创新一直是其核心竞争力。公司不断投入研发资源,推出了多款具有自主知识产权的数据采集产品。其中,一款便携式DAQ设备因其高精度、低噪声的特点,在市场上获得了广泛认可。这款产品的成功,为公司赢得了大量客户,也为公司的后续发展奠定了坚实基础。

宜源科技(ETERNAL)公司的发展小趣事

宜源科技公司深知品质对于企业长远发展的重要性。因此,公司从原材料采购到生产流程控制,再到产品出厂检验,都严格遵循国际标准和行业规范。通过不断提升产品品质,宜源科技赢得了客户的信赖和市场的认可,逐渐树立起自己的品牌形象。

科通(COMTEK)公司的发展小趣事

科通技术股份有限公司(简称科通技术)成立于1995年,总部位于深圳,是中国早期知名的IC元器件分销商。公司创始人凭借对电子行业的敏锐洞察力和对市场需求的深刻理解,迅速在市场中站稳脚跟。初期,科通技术主要专注于为国内外客户提供高质量的电子元器件和专业的技术支持,凭借其卓越的产品质量和服务水平,赢得了客户的广泛认可。

Heimann Optoelectronics Gmbh公司的发展小趣事

为了进一步扩大市场份额,Hei Inc Optoelectronic Division积极实施国际化战略。公司首先在欧洲和北美市场设立了分支机构,并建立了完善的销售和服务网络。通过参加国际展会、与当地企业建立合作关系等方式,公司成功地将产品推向了国际市场。同时,公司还加大了对海外研发中心的投入,吸引了众多国际顶尖的光电子专家加盟。这些举措不仅提升了公司的国际竞争力,还为公司带来了更多的国际订单和合作伙伴。

Datatronic公司的发展小趣事

随着全球化趋势的加速,Datatronic公司开始将目光投向国际市场。公司通过参加国际展览、设立海外办事处等方式,积极拓展海外市场。同时,公司还加强了与国际企业的合作,引进先进的技术和管理经验。这些努力使得Datatronic公司在国际市场上逐渐获得了认可,品牌影响力得到了提升。

问答坊 | AI 解惑

如何获取18B20的序列号

请教大虾们如何编写C程序获取18B20的序列号?并且在液晶上显示 [ 本帖最后由 ruiquan765 于 2009-3-13 22:36 编辑 ]…

查看全部问答>

求powerpcb软件下载地址

各位兄弟,谁有powerpcb下载地址,共享一下,谢谢!…

查看全部问答>

freescale 降低噪声方法

飞思卡尔工程师的一个简单的note…

查看全部问答>

WINCE系统,如何检测USB鼠标插拔?

想在应用程序里检测鼠标的插拔情况,当鼠标插上时,显示鼠标光标,当鼠标拔掉时,隐藏鼠标光标,请问这个要怎么做啊!有没有USB设备插拔的消息或事件之类的啊?…

查看全部问答>

如何设置手机浏览为IE和Opera?

如何设置手机浏览为IE和Opera?…

查看全部问答>

通过硬盘通道下载bootloader?

网上关于usb、网络的资料倒是很多 关于硬盘下载的我搜不到呀 说是使用于PC或服务器的 请问各位大侠用于嵌入式的可以吗?…

查看全部问答>

急!!!请各位看看我的这个触摸屏程序就是显示不出坐标?

程序好像没有运行这一部分(红色显示) 下面是我的程序: #include #include #include sfr AUXR = 0x8e; #define X_ADDR XBYTE[0x0000] #define Y_ADDR XBYTE[0x0100] #define CMD XBYTE[0x0200] #define DAT XBYTE[0x0300] unsigne ...…

查看全部问答>

请问下VICVectAddr0 = (int)IRQ_Handler;是什么意思

Vectors LDR PC, ResetAddr LDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr DCD 0xB8A06F58 LDR PC, LDR PC, FIQ_Addr ResetAddr DCD Reset UndefinedAdd ...…

查看全部问答>