重要的事情要说三遍,这个通信口,非常重要!非常重要!非常重要!
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】5分钟了解STM32的串口通信
下一篇:STM32第九章-IIC通讯应用
推荐阅读
史海拾趣
在伊顿的发展历程中,合作伙伴起到了至关重要的作用。伊顿一直秉持开放合作的态度,与全球各地的企业和机构建立了广泛的合作关系。通过与合作伙伴的共同努力,伊顿不仅在技术和产品上取得了突破和创新,还实现了市场份额的快速增长和业务的全球化拓展。例如,伊顿与天合智慧达成的战略合作伙伴关系,就是双方共同推动分布式光伏产业发展的有力证明。这一合作不仅为双方带来了共赢的机会,也为全球能源结构的转型和升级做出了积极贡献。
以上五个故事涵盖了伊顿公司在电子行业中的发展历程、在中国市场的拓展、与绿色能源的结合、在商用车领域的发展以及与合作伙伴的共赢等多个方面。这些故事不仅展示了伊顿公司的实力和成就,也体现了其不断创新和追求卓越的精神。
Dantona Industries公司的创始人,Daniel Tona,在电子工程领域拥有深厚的背景。他看到了电子行业的巨大潜力,决定创立自己的公司。起初,他只有一间小办公室和几个志同道合的伙伴。为了节省成本,他们经常需要亲自采购材料、组装产品,甚至进行市场推广。在这个过程中,他们遇到了资金短缺、技术难题以及市场竞争等多重挑战。然而,凭借对技术的执着和对市场的敏锐洞察力,Daniel Tona带领团队一步步克服困难,逐渐在电子行业站稳了脚跟。
面对日益全球化的市场环境,EHC公司积极实施国际化战略。公司通过与国外知名企业的合作,引进先进的技术和管理经验,不断提升自身的竞争力。同时,EHC公司还积极参加国际展会和论坛,拓展海外市场。经过多年的努力,EHC公司的产品已经成功打入国际市场,并在多个国家和地区建立了稳定的销售渠道。
在电子行业的初期,CANDD公司凭借其创始人对半导体技术的深入研究,成功开发出了一款具有划时代意义的芯片。这款芯片不仅性能卓越,而且成本远低于市场上的同类产品。凭借这一技术突破,CANDD公司迅速在行业内崭露头角,吸引了大量投资者的关注。随着产品销量的不断增长,公司逐渐扩大了生产规模,并在全球范围内建立了销售网络。
在汽车产业领域,Daewoo公司同样取得了令人瞩目的成就。大宇汽车公司作为Daewoo集团的骨干企业,自1983年独立以来,凭借其先进的技术和出色的品质,迅速在韩国汽车市场崭露头角。公司不仅在国内市场表现优异,还积极开拓国际市场,成功将产品出口到世界各地。
在电子行业中,Diconex公司始终坚持以客户需求为导向的市场定位策略。公司深入调研市场需求,针对不同客户群体推出定制化解决方案。这种精准的市场定位使得Diconex的产品能够更好地满足客户需求,赢得了客户的信任和忠诚。同时,公司还积极拓展国际市场,与全球知名企业建立了长期稳定的合作关系。
专业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 ...… 查看全部问答∨ |
完整的工程文件,包括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版的 … 查看全部问答∨ |
|
打听下关于手机定位,看到类似谷歌纵横的应用软件,想问下是如何实现定位的(不是用GPS),用GPS的一般好象容易点,软件好象可以根据基站来确定经纬度,原理是不是这样的:手机里的软件根据收到的基站数据(是不是类似GPS定位的原理 ...… 查看全部问答∨ |
这是我的程序:当定时器打开后就接收不到数据了,屏蔽掉定时器就可以了!请大侠指教原因所在! /*************************************************************/ /*本设计采用STC89C52单片机 &nb ...… 查看全部问答∨ |
最近老大要我用 ce6.0开发一个程序 要求实现 晃下手机就能关闭闹铃提示,我以前做游戏开发的,应用这方面做起来真的是好无头绪。 我想了 1中设计模式来实现: 就是做一个程序注入内存中时刻监视闹铃是否响 如果响了 然后关闭。不知道 ...… 查看全部问答∨ |
最近刚开始学习TMS320F28027,不过它的中文学习资料不多! 希望大家多多在论坛里交流啊 发个自己做的TMS320F28027代码生成器,不过只是GPIO部分,不知道有没有问题,请大家口下留情啊… 查看全部问答∨ |
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延长设备 想通网线读取远端USB接口的硬盘的数据,希望做过的或者准备搞的或者有兴趣的朋友进来讨论讨论 版主有没什么想法啊?… 查看全部问答∨ |