您的位置 首页 基础

stm32下485运用记载

使用STM32做为控制器,板上要求有4个485接口,一个232接口,当232有数据到达时,按条件转发给485,当485有数据到达时,无条件转给232刚开始

运用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发送数据的时刻不行,后经修正波特率为9600,输入中止不再发生,
但发送数据与接纳到的数据不相同,后在发送函数内加了必定时刻延时,方可!
void Serial3PutChar(u8 c)
{
int i;

MAX485EN3(); //485输出操控 GPIO_SetBits(GPIOE, GPIO_Pin_15)

delay_mS(1);

USART_SendData(USART3, c);

while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);

delay_mS(10);

MAX485RE3(); //485输入操控 GPIO_ResetBits(GPIOE, GPIO_Pin_15)

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/317317.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部