STM32 Uart及其配置

发布者:平静的33号最新更新时间:2021-10-14 来源: eefocus关键字:STM32  Uart  配置  发送器 手机看文章 扫描二维码
随时随地手机看文章

重要的事情要说三遍,这个通信口,非常重要!非常重要!非常重要!


Uart =  Universal Asynchronous Receiver/Transmitter,通用异步接收器/发送器,它的特点就在于它的名字,通用,很多地方都用到;异步,它没有同步时钟;接收器/发送器:能收能发,全能小超人。


一般用在上位机(比如PC,比如中控等)与单片机的通信,单片机与模块间的通信,单片机与单片机的通信等等,主要用于两个不同设备间的通信,总之,它很通用!


它的主要特点除了它的名字之外,还要明白几个:1.一对一;2.全双工;3.传输距离不长,15m以内,长了干扰啊,还得取决于硬件设计电路;


PC如何与单片机通信呢?


PC相关的通信接口叫COM口,它有9个pin,是RS-232的电平标准,+15/+13V表示1,-15/-13V表示0;


单片机的相关通信接口叫UART口,它有4个pin,是TTL电平标准,+5V表示1,0V表示0;


这两个接口标准不一样,引脚数目不一样的通信接口,如何连接呢?


1. 电平标准不一样,需要一个电平转换芯片,MAXxxxx,所以,大家看到的,单片机跟PC机的接口连接上,有一个电路,如下图:

2. 引脚数目不一样,


Uart有四个引脚,VCC(电源),RXD(接收),TXD(发送),GND(地);


COM口有9个引脚,我们只用第2个pin(RXD)和第3个pin(TXD)就行了,其它引脚暂时不管;


需要注意的是,要把PC的RXD和板子的TXD连接起来,板子发送对PC接收,把PC的TXD和板子的RXD连接起来,PC发送对板子接收,还要记得共地,也就是把串口的铁壳子和板子的地连接起来;


具体的设计原理和细节,软件工程师不需要了解太多,知道有这么一回事就行了。


同理,单片机与单片机,单片机与模块通信,也就是把不同设备的RXD和TXD交叉连接起来。


如下图:上面的是板子上的接口,下面的是PC的接口,USB转COM口;

这两个长这样子的口,怎么连接起来呢?都是针针的,咋个连接?


这里普及一下公头和母头,


如上图,带有很多针针的,就是公头;


如下图,带有很多孔的,就是母头;


由于我用的两个都是公头,就必须要用两端都是母头的线连接起来;

如何连接?两端连接上去咯,连接后的图如下图:

好了,硬件接口讲解完毕,现在开始软件接口的配置了,


1. 找原理图,找到 RXD = PC11,TXD = PC10,这个根据原理图来,不能千篇一律;


2. 建一个STM32Cube工程,参照STM32CubeMx 创建第一个工程;


3. 在Pinout页,看一下PC11/PC10,可以设置为UART4,那就把它设置为 UART4吧,设置标示的 1)和 2);

4. 配置完引脚,在Configuration页,点刚刚配置引脚的UART4,可以配置UART4;

讲解一个Baud Rate、Word Length、Parity、Stop Bits、Data Direction、Over Sampling的含义吧。


先来一个串口时序图,如下图:先发一个 Start bit,接下来发几位数据,再接下来发个 Stop bit,一个数据帧结束,接下来发下一帧;

Baud Rate:波特率,通信的速率,表示每秒传多少个Bits,我们设置成 115200 Bits/s,一秒钟能传115200个Bits,通信的速率越高,传输数据越快,当然,传输距离就越短,出错的可能性也越大;


Word Length:一帧数据帧的位数,一个Start Bit到一个Stop Bit,就算一帧数据,一个BYTE为8 Bit,一般设置为8;


Parity:奇偶校验位,数据位为“1”的个数,加上这个位,使得"1"的个数为偶数(偶校验)或者奇数(奇)校验,以此来校验数据的正确性,如果想用8 Bit数据和校验位,可以把上面的Word Length设置为9,奇偶校验位设置为奇或者偶;不过我们这里不使用奇偶校验位;


Stop Bits:停止位,表示数据帧结束;另外,由于是异步传输,没有专门的时钟,每个设备有不同的时钟源,可能会有一点点点小小的偏差,这个停止位还可以用来提供通信双方校正通信同步的机会;


Data Direction:这个还用说,当然选收发咯,当然,你也可以选单收或者单发,你喜欢,你愿意!


Over Sampling:对这东东,只要知道 1. 主要用来做接收采样的,8倍波特率或者16倍波特率;2. 波特率计算跟这个有关系,反正不用自个计算;3. 我们平常用的波特率都在1MBps之下,选啥没什么区别;具体就不上图了,RM0033文档满上,撸一把!


总之,通信双方,参数,一定要一致!一定要一致!!一定要一致!!!


好了,生成代码,生成的代码是这样的,有没有熟悉的感觉撒:

看下MX_UART4_Init(),是不是就是刚才配置的参数?

再次回到main()函数里面,看看while(1){}里面,是不是空空如也呀?有没有觉得,应该加点什么?


我们就做一个收到什么,就把收到的自加1,再发送出去的功能吧。


首先,声明个变量,用来存放收到的数据;

接下来,将收到的数据自加1,发送出去:

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)


HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)


作用是接收/发送串口数据,


*huart:句柄


*pData:数据指针,该指针的内容就是接收/发送的数据


Size:接收/发送数据的长度,因为这里只接收一个字节,就写1,如果要接收多个数据,可以填其它数,但pData可以传入一个数组;


Timeout:时间,因为直接在循环里面轮询,就直接填0;


这两个函数在HAL库里面有实现的源码,有兴趣的话可以看看,对照着RM0033阅读代码,看看它是如何实现的,会有很大收获;


编译,运行,在PC机上用串口调试助手测试下;

串口配置一定要和MCU配置一致;


请钩上HEX发送,HEX显示;


这里是直接用轮询的方式接收串口数据,后面,我们再讲解一下用中断和DMA的方式接收串口数据并处理吧。


    整个工程及代码呢,请上百度网盘上下载咯;


    链接:https://pan.baidu.com/s/19usUcgZPX8cCRTKt_NPcfg 密码:07on


    在Code/UartTest文件夹里面;

关键字:STM32  Uart  配置  发送器 引用地址:STM32 Uart及其配置

上一篇:【STM32】5分钟了解STM32的串口通信
下一篇:STM32第九章-IIC通讯应用

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

ARM 平台printf函数定位到uart输出介绍
1.1 ARM 串口输出函数uart_printf ARM如果能使用C函数库自带的printf函数格式输出,那多方便,但是默认的printf都是定位到stdout终端,而不是串口,本文章讲述的是如何定位到ARM的串口。 1.1.1 函数主要代码 有在Mini2440开发板上验证过 //*****************main.c******************************* #include serial.h int Main() { unsignedint plck_val = 50000000; unsignedint buad_val = 115200; un
[单片机]
三星S10存储配置大曝光:1TB存储
三星手机官方推特@Samsung Mobile 正式宣布:Galaxy新品发布会将于2月20日举办。联系先前的发布地点信息,发布会将会在北京时间2月21日凌晨3点进行。   根据此前的爆料,三星S10系列共包括3-4款手机,三星S10 E、三星S10、三星S10 +、三星S10 5G版本,   据知名爆料人Max Weinbach引用了多个行业消息来源的爆料消息,最便宜的型号Galaxy S10E将只有4+128GB一种存储配置,不过它支持内存卡扩展。   常规的Galaxy S10,其配置将与去年的Galaxy S9 +大致相同,包括6GB内存,并为消费者提供128GB或256GB内部存储选项。之前的64
[手机便携]
三星S10存储<font color='red'>配置</font>大曝光:1TB存储
STM32--CAN总线应运
CAN 总线在控制领域使用的非常广泛,如今大多数CPU芯片外围都扩展CAN接口。本文重点介绍以STM32F103E系列芯片为基础介绍CAN 总线的使用方法。 1. 硬件基础 CAN总线工作需要两根数据线,RX和TX,即为输入总线和输出总线。一般CPU与外界通信需要接一个驱动芯片(这点很像UART接口),常用的CAN芯片主要有:SN65VHD230、PCA82C250T等,本系统使用SN65VHD230作为CAN接口芯片。而CPU提供的CAN接口为CAN_L和CAN_H。 2. 软件设计 在进行软件设计时,我们首先来看这样的一个结构体: typedef struct { uint32_t StdId;
[单片机]
记ST_LINK与STM32的连接调试
由于先前的32板子不能但不调试,就是不支持JTAG/SWD,平时测试程序只能是编译没问题了就直接下载到板子上,如果想看运行过程中的变量的值只能是靠自己的推测,或者一些自己想出来的土办法(比如用串口打印或者led显示)。 于是在某宝30多块入手mini32板子加st-link调试器。如图 客服不是很专业,给了一些资料就完事了,再问一些问题,一直支支支吾吾的答不上来。只能是自己看资料解决了。 下面将连接流程介绍下: 首先保证连线的准确,这是重中之重,一定要检查清楚。 其次安装客服给的ST-link v2驱动程序,安装过程中的选项默认就好包括路径。 安装完成后插上STLINK打开设备管理器就可以看到STLINK
[单片机]
记ST_LINK与<font color='red'>STM32</font>的连接调试
嵌入式STM32学习:I2C-读写EEPROM2
bsp_i2c_ee.h #ifndef __I2C_EE_H #define __I2C_EE_H #include stm32f4xx.h /* AT24C01/02每页有8个字节 */ #define I2C_PageSize 8 /* AT24C04/08A/16A每页有16个字节 */ //#define I2C_PageSize 16 /* STM32 I2C 快速模式 */ #define I2C_Speed 400000 /* 这个地址只要与STM32外挂的I2C器件地址不一样即可 */ #define I2C_OWN_ADDRESS7
[单片机]
三、UART【MSP430学习笔记】
一、UART0串口发送接收数据 MSP430的通用串行结构USCI支持多种串行通信模式。在MSP430F249这个型号含有4个USCI模块,下表是支持UART模式的USCI_Ax的相应寄存器: 1、串口0初始化例程 模式为UART、配置p3.4和p3.5为通信接口、偶校验、波特率:2400 void InitUART0(void) { P3OUT |= BIT4+BIT5; P3SEL |= BIT4+BIT5; //设置p3.4与p3.5为串口通信 UCA0CTL1 |= UCSSEL0 + UCSWRST;//设置串口0时钟为ACLK,置位UCSWRST,初始化所有的USCI寄存器 U
[单片机]
三、<font color='red'>UART</font>【MSP430学习笔记】
STM32-(22):定时器TIM(理论)
STM32系列的CPU,有多达8个定时器。 1、 其中TIM1和TIM8是能够产生三对PWM互补输出的髙级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。 2、 其它6个为普通定时器,时钟由APB1的输出产生。 定时器的作用: 1、 定时功能 2、 计数功能 3、 输入捕获 4、 匹配输出 5、 PWM咏冲波 1、功能描述. 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 它适用于多种场合,包括测量输入信号的脉冲长度(输入采集)或者产生输出波形(输 出比较和PWM)。 定时器是完全独立的,而且没有互相共享任何资源。 定时器还可以与定时器形成级联,组建更大的定时范围。 NOTE:只要你使用默认的
[单片机]
STM32-(22):定时器TIM(理论)
STM32 cannot enter debug mode错误
调试STM32时,MDK环境,有的代码下进去后,突然以后再Debug的时候,就会出现:Cannot enter Debug Mode ,显示错误Error:Flash Download failed-Target DLL has been cancalled. 可以尝试着用ISP方式,将片上的FLASH全部擦掉就OK了。 使用先设置跳线boot0 = 1,boot1=0。然后连上串口线,波特率默认即可,读STM32的器件信息,再擦除。。。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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