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


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通讯应用

推荐阅读

用的是轮询方式,后面会有中断方式的实现,闲话少说,进入正题,程序由前一个实验Tiny4412之C语言实现流水灯更改而来:一、控制原理说明先看一下原理图:按键原理图首先把按键对应的GPIO设置为输入模式,修改GPX3CON寄存器(板子不同,可能对应的GPIO管脚不同),通过上图可知当没有按下按键时,对应的GPIO状态为高电平,当有按键被按下时,对应的GPIO变为...
  工业控制主要分两个方向,一个是运动控制,通常用于机械领域;另一个就是过程控制,通常使用于化工领域。而运动控制指的是一种起源于早期的伺服系统,基于电动机的控制,以实现物体对角位移、转矩、转速等等物理量改变的控制。  从关注点来说,电机控制(这里指伺服电机)主要关注的是控制单个电机的转距、速度、位置中的一个或多个参数达到给定值。...
1984年,Ross Freeman与同事共同创立了赛灵思公司,并推出了世界上第一颗真正意义上的FPGA芯片XC2064,一个全新的行业就此诞生。 2020年,历经36年发展的赛灵思公司早已成为硅谷中的明星公司,FPGA行业也今非昔比。5G、AI为这个行业带来了难得的机会,广阔的发展空间就在眼前,但是领头者赛灵思公司却突然陷入了收购的传闻中。人们不禁会发问,独立的FPGA...
一.硬件方案根据恒温箱控制器的功能要求,并结合对51系列单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制。所以采用AT89C52作为电路系统的控制核心。按键将设置好的温度值传给单片机,通过温度显示模块显示出来。初始温度设置好后,单片机开启输出控制模块,使电热器开始加热,同时将从数字温度传感器DS18B20测量到的温度值实时的显示出来,...

史海拾趣

问答坊 | AI 解惑

大家一起818 arm技术方面实用的网址吧

专业arm技术论坛 http://www.armjishu.com 嵌入式开源社区 http://www.oschina.net/project/tag/41 arm9开发社区   http://www.arm9bbs.com/ arm开发者论坛  http://www.armforum.cn/ FPGA/CPLD综合  http://www ...…

查看全部问答∨

Ep2c8 fpga的原理图,pcb,gerber图。

完整的工程文件,包括pcb图原理图gerber图,不同时期的版本都有。 花了半年功夫做的。 06年的作品,当时,房价是现在的1/4 没最后做pcb,大家参考吧。 [ 本帖最后由 wangkj 于 2009-12-24 17:04 编辑 ]…

查看全部问答∨

求个 .NET Compact Framework 2.0 for CE5.0 的下载地址

求个 .NET Compact Framework 2.0 for CE5.0 的下载地址就是能放到 CE 系统里。然后能安装的那个。我只下到WM5版的。。下不到CE版的 …

查看全部问答∨

有人做过6410的板子吗?

1.引脚如何引出,需要多层板吗? 2.部高频信号线时需要注意什么? 3.需要和驱动工程师沟通吗?要注意哪些方面。…

查看全部问答∨

新手问个关于用手机定位的问题?

    打听下关于手机定位,看到类似谷歌纵横的应用软件,想问下是如何实现定位的(不是用GPS),用GPS的一般好象容易点,软件好象可以根据基站来确定经纬度,原理是不是这样的:手机里的软件根据收到的基站数据(是不是类似GPS定位的原理 ...…

查看全部问答∨

51单片机的定时器0和串口同时使用问题,急!

这是我的程序:当定时器打开后就接收不到数据了,屏蔽掉定时器就可以了!请大侠指教原因所在! /*************************************************************/ /*本设计采用STC89C52单片机           &nb ...…

查看全部问答∨

求助一个闹铃关闭的问题

最近老大要我用 ce6.0开发一个程序 要求实现 晃下手机就能关闭闹铃提示,我以前做游戏开发的,应用这方面做起来真的是好无头绪。 我想了 1中设计模式来实现: 就是做一个程序注入内存中时刻监视闹铃是否响 如果响了  然后关闭。不知道 ...…

查看全部问答∨

共同学习TMS320F28027

最近刚开始学习TMS320F28027,不过它的中文学习资料不多! 希望大家多多在论坛里交流啊 发个自己做的TMS320F28027代码生成器,不过只是GPIO部分,不知道有没有问题,请大家口下留情啊…

查看全部问答∨

IAR编译结果,提示信息中code和data大小信息

12 446 bytes of readonly  code memory          58 bytes of readonly  data memory   11 045 bytes of readwrite data memory 12 446个字节代码? 58和11 045是哪个 ...…

查看全部问答∨

想实现USB数据通过网线传输,带宽想做到480M,行吗?

说白了就是想搞个USB延长设备  想通网线读取远端USB接口的硬盘的数据,希望做过的或者准备搞的或者有兴趣的朋友进来讨论讨论 版主有没什么想法啊?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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