stm32下485使用记录

  • 格式:docx
  • 大小:10.29 KB
  • 文档页数:2

下载文档原格式

  / 1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

stm32下485使用记录

使用STM32 做为控制器,板上要求有4 个485 接口,一个232 接口,当

232 有数据到达时,按条件转发给485,当485 有数据到达时,无条件转给232

刚开始编写代码时,由于对485 使用不熟悉,不知道该注意哪些,就直接编写

程序:1.配置管脚,这里管脚配置232 与485 是一样的,但485 要用一个管脚

的高低电平控制输入输出方向,这里使用使用4 个管脚对串口2--串口4 控制2.

中断配置,每个串口给与打开对应的中断线,并给与一定的优先级3.串口配置,

这里包含时钟、波特率、8N1 等,并选择使用的中断事件,这里所有串口都选

用接收中断232 配置和485 配置是一样的,无非485 是半双工的,需要控制方

向,还有一个特别注意的地方,也是我记录这个文档的原因:由于硬件是我手

工制作,不确定所用串口都能使用,所以使用循环输出测试是否到pc 的串口

助手,测试结果发现程序一直会进入输入中断,没错是输入中断,发送数据进

入输入中断,后经仔细研究发现问题,代码如下:主函数int main(void){u8 cmd = 0xaa;//配置过程不写了while(1){serial3_putchar(cmd);}}串口接收中断我已

打开,这里不写了串口3 发送字节函数void Serial3PutChar(u8 c){int i;MAX485EN3(); //485 输出控制GPIO_SetBits(GPIOE, GPIO_Pin_15) USART_SendData(USART3, c);while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);MAX485RE3(); //485 输入控制GPIO_ResetBits(GPIOE, GPIO_Pin_15)}串口中断服务子程序void USART3_IRQHandler(void){if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET){Serial1PutChar(Serial3GetChar()); //串口1 发送串口2 接收到的数据USART_ClearITPendingBit(USART2, USART_IT_RXNE);}}后来经过本人查找

资料及反复思量,发现问题是485 发送数据的时间不够,后经修改波特率为