RS485使用串口输出最后一个字节固定为FF
项目场景:
将STM32或STM8L作为主控时,在板子上使用到SP3458芯片,来实现串口转RS485输出,从而可以连接其他RS485输出设备
问题描述:
在串口转485时,根据波特率的不同,总是出现输出最后一个字节固定为0xFF,前面字节会根据波特率丢失或更改字节大小
例如:
u8 buf[5] = {0x01,0x02,0x03,0x04,0x05}
RS485串口输出十六进制
01 02 03 04 FF
USART中输出数据代码:
//RS485串口输出
void UART1_SendString(char buf[])
{unsigned int i = 0;while(buf[i] != '\0') { while(((USART1->SR) & 0x80) == 0x00);USART_SendData8(USART1,buf[i++]); }
}
在百度上找了部分答案说使用DMA来实现,但错误未能解决
原因分析:
波特率的不同导致数据更改可以理解,但是在高或者低波特率时,最后一个字节0XFF为固定输出,觉得这才是重点,在输出时,如果多输出一个字节会怎样
于是有
u8 buf[6] = {0x01,0x02,0x03,0x04,0x05}
RS485串口输出十六进制
01 02 03 04 05 FF
看来只要多输出一个字节就好了
于是 在输出时,输出printf("");
问题解决
解决方案:
输出结束后 多输出一次null
貌似连波特率高低问题也解决了
void UART1_SendString(char buf[])
{unsigned int i = 0;u8 dat = '';while(buf[i] != '\0') { while(((USART1->SR) & 0x80) == 0x00);USART_SendData8(USART1,buf[i++]); }//需要多输出一次USART_SendData8(USART1,dat);//printf("");
}
RS485使用串口输出最后一个字节固定为FF相关推荐
- STM32移植RT-Thread的串口只能接收一个字节数据的问题
特别值得注意的地方,事先在rtconfig.h里面把#define RT_USING_CONSOLE和#define RT_USING_FINSH都注释掉.
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个...
2019独角兽企业重金招聘Python工程师标准>>> 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如"我ABC ...
- stm32 usart 单线半双工串口 DMA发送 最后一个字节发不出来问题
最近遇到一个小问题,感觉很有意思便记下来分享一下 ,顺便也为日后类似的问题提供点思路: 使用stm32串口发送数据 ,串口是单线半双工模式,要求数据发送前串口变成发送模式,发送完后立即变回接收模式,发 ...
- java将一个整数按字节输出_在java中的整数类型有四种,分别是 byte short int long 其中byte只有一个字节 0或1,在此不详细讲解。其他的三种类型如下:1、...
在java中的整数类型有四种,分别是 byte short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1. 基本类型:short 二进制位数:16 ...
- 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串。 但是要保证汉字不被截半个。
题目: 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4, 应该截为"我AB",输入 ...
- 嵌入式之串口中断只能收到一个字节
串口中断只能收到一个字节原因排查: 1.中断程序占用时间过长,导致后面的数据到达的时候无法接受. 2.中断清除标志位. 3.串口中断优先级太低,导致中断嵌套.将优先级设为最高.
- 关于STM32串口接收中断中只能接收一个字节()
最近调试STM32的串口接收时发现例程中只能接收一个字节 例程如下: 1 //初始化串口12 void uart_init(u32 bound){3 //GPIO端口设置4 GPIO_InitType ...
- 串口接收一个字节所需要的时间
以波特率为9600来算 波特率是指发送二进制数据位的速率,即9600的波特率表示一秒发送9600个位: 波特率9600 = 9600(位/秒) 假设传输一个字节需要起始位1位,数据位8位,结束位1位: ...
- 详解RS232、RS485、RS485、串口握手
一.RS232基础知识 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式.由于串行通讯方式具有使用线路少.成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用 ...
- STM32获取GY-25A倾角传感器串口输出数据
STM32获取GY-25A倾角传感器串口输出数据 GY-25A模块是新型的倾角传感器模块,具有X和Y两轴模拟角度输出和串口角度输出的功能.这里介绍STM32获取GY-25A串口输出的角度数据.(获取模 ...
最新文章
- ICLR2020 | 谷歌最新研究:用“复合散度”量化模型合成泛化能力
- 各种排序算法思想小结
- (传送门)Ubuntu 常用软件安装
- python上下条形图-Python之多变量叠加条形图
- 物联网的兴起与二维码的前景
- python一行输入多个值用空格隔开_2020-09-22-Python-函数嵌套、filter()函数、一行输入多个整数(空格分隔)、多维列表的输入...
- sql数据库基础知识整理,常用函数及常用语法
- 【推荐软件】wingrep
- php安装mem+cache扩展,安装memcached及php扩展
- 二、Get和Post的区别
- 文件删除后未释放磁盘
- 纳加服务器授权文件,VJSAC(纳加VJMS3服务管理终端)
- Drools规则引擎的基本使用
- gentoo 修改键盘映射
- AUTOSAR CAN Wakeup Analysis
- Aspose.Words for .NET使用文档教程(5):如何使用脚注和尾注并设置每页行字数
- PartnerLink,PartnerLinkType详解
- JAVA Io 流 字符流 编码表 编码和解码的方法
- 滑滑梯中的智慧(zt)
- 服务器操作系统巡检维护,服务器操作系统巡检内容