历史上的今天
返回首页

历史上的今天

今天是:2025年07月11日(星期五)

正在发生

2019年07月11日 | STM32入门——第二天学习串口收发

2019-07-11 来源:eefocus

第二步 学习串口, 实现串口收发



学习之前先了解几个重要的寄存器:


串口时钟使能,GPIO相应时钟使能:APB2ENR、APB1ENR  

GPIOx模式设置:GPIOX_CRL/ODR ,如图:

输出位应设置为推挽复用输出


接收位设为浮空输入或带上拉输入,设置方法参看前一篇讲解。


 

串口复位: APB2RSTR 、 APB1RSTR 

串口波特率设置: USART_BRR

串口控制:USART_CR1~3

    初步只用到USART_CR1,UE 为串口使能位,使串口开始工作;M 为字长选择位,8或9位数据;PCE 为校验使能位,0禁止校验;PS 为校验位选择,设置为 0 则为偶校验,否则为奇校验;TCIE 为发送完成中断使能位; RXNEIE 为接收缓冲区非空中断使能,接收到数据后进入中断函数;TE 为发送使能位,设置为 1,将开启串口的发送功能。RE 为接收使能位,用法同 TE。

数据发送与接收:USART_DR

      包含了 TDR 和 RDR,当向该寄存器写数据的时候,串口就会自动发送,当收到收据的时候,也是存在该寄存器内。


串口状态寄存器 USART_SR 

       RXNE(读数据寄存器非空),当该位被置 1 的时候就是提示已经有数据被接收到了,并且可以读出来了。通过读 USART_DR 可以将该位清零,也可以向该位写 0,直接清除。 


TC (发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。该位也有两种清零方式:1)读 USART_SR,写USART_DR。2)直接向该位写 0。


根据顺序依次配置完这几个寄存器后,串口初始化就基本完成了




接下来可以根据代码来进一步理解串口配置过程


计算波特率部分有兴趣的可以查阅相关资料理解一下。


写完后串口基本配置完成了,下面是接收数据的函数:


根据上面寄存器的讲解这些内容是很简单的!


还有一点,USART_RX_BUF[ ],这个数组是这样定义的:

       如果你在某一头文件(如A.h)中定义了extern u8 USART_RX_BUF[133];  表明该数组的定义在别的文件中。在C文件中正常定义(例u8 USART_RX_BUF[133];)然后使用后使该数组中加入了数据,如果想在别的C 文件中(如main.c)将其中的数据读出来,可将该头文件(A.h)加入到该C文件(如main.c)中即可,或直接将extern u8 USART_RX_BUF[133]; 加入到该C文件(如main.c),当编译器遇到时会知道它的定义在别的文件中,并去找到。extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!” 编译的时候C文件是逐个编译的,如果你用到了某一个本文件中没定义的标示符,编译器会报错,而链接阶段,各个文件的内容(实际是编译产生的obj文件)是被合并到一起的,因而,定义于某文件内的全局变量,在链接完成后,它的可见范围被扩大到了整个程序,如果你在两个C 文件中定义了相同的全局变量,那么编译时可以通过,链接时就因重复定义报错了,总之如果你想在A.c文件中用到其它C文件中的变量,可以在A.c文件中声明(如extern u8 USART_RX_BUF[133];)该变量,使用即可。如果还是不懂的话,可以去百度上搜一下。


下面是主函数了:

推荐阅读

史海拾趣

Empro Technology Corp公司的发展小趣事

Empro Technology Corp成立于2005年,由一群热衷于电子技术的工程师创立。在初创阶段,公司专注于研发高效能、低功耗的半导体芯片。经过数年的不懈努力,公司成功推出了一款具有颠覆性技术的芯片产品,其性能远超当时市场上的同类产品,迅速获得了市场的认可。

Filtran Ltd公司的发展小趣事

随着业务规模的扩大,Filtran Ltd意识到供应链管理的重要性。公司开始在全球范围内寻找优质原材料供应商,并在亚洲和欧洲建立了生产基地,以降低成本并缩短交货周期。同时,通过引入先进的ERP系统和数字化管理工具,实现了供应链的高效协同。这一战略调整不仅提高了生产效率,还增强了公司对市场变化的快速响应能力。

ept Connectors公司的发展小趣事

随着全球环保意识的不断提高,EPT Connectors公司也开始关注环保和可持续发展问题。公司积极采取各种措施减少生产过程中的污染和浪费,并推出了一系列环保型连接器产品。同时,EPT还积极参与各种环保活动和社会公益事业,以实际行动践行企业的社会责任。这些举措不仅提升了EPT的品牌形象和社会声誉,也为其未来的发展注入了新的动力。

Echelon公司的发展小趣事

在激烈的市场竞争中,Echelon始终保持对技术的热情和追求。公司不断投入研发资源,对LonWorks技术进行升级和优化,推出了一系列创新的产品和服务。这些新产品和服务不仅提升了Echelon的市场竞争力,还为客户带来了更加高效、便捷的能源管理体验。同时,Echelon还积极与其他科技公司合作,共同研发新技术、新产品,推动整个行业的发展。

Advanced Detector Corp公司的发展小趣事

为了进一步提升竞争力,ADC积极寻求与其他企业的战略合作。通过与业界领先的企业建立合作关系,ADC成功整合了各方资源,共同研发新技术、新产品。这些合作不仅加速了ADC的技术创新步伐,也为其带来了更多的商业机会。

Fenwal Controls公司的发展小趣事

作为一家有远见的企业,Fenwal Controls始终关注社会责任和可持续发展。公司积极参与公益活动,回馈社会。同时,Fenwal Controls还注重环境保护和资源节约,通过采用环保材料、推广节能产品等措施,降低产品对环境的影响。此外,公司还注重员工的培训和发展,为员工提供广阔的晋升空间和良好的工作环境。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了强大动力。

以上五个故事都是基于Fenwal Controls公司可能经历的发展历程而虚构的。在实际中,公司的发展路径可能会因各种因素而有所不同。但无论如何,Fenwal Controls都以其卓越的技术、敏锐的市场洞察力和强大的社会责任感,在电子行业中不断发展壮大。

问答坊 | AI 解惑

求答疑!!!!windows 怎么向 linux 发送一个 .c文件,linux能完整接收编译?

我的目标是在C#平台自动生成一个目标.c文件,而编译工作要使用linux下的gcc编译我的目标.c文件,(考虑到windows下的cygwin编译出来的可执行文件在linux是不能跑的)我现在的问题是:怎么才能把windows下我的.c文件传给到linux编译????? 等待 ...…

查看全部问答>

单片机与TCP/IP网络(ISA总线接口定义)

ISA ISA=Industry Standard Architecture (isa总线) Pin Name Description 引脚 名称 含义 A1 /I/O CH CK I/O channel check; active low=parity error A2 D7 Data bit 7 A3 D6 Data bit 6 A4 D5 Data bit 5 A5 D4 Data bit 4 A6 ...…

查看全部问答>

windows下能开发linux的驱动嘛?

我是初学者,不想装linux,不知道有没有办法在windows下开发linux的驱动啊,那位知道的蝈蝈帮忙指点下,谢谢…

查看全部问答>

Windows Mobile 中有没有免提键的虚拟码

如题,如果没有的话,怎么做才能实现免提的功能?…

查看全部问答>

DOS下RS485双机通讯

问题有三: DOS下232串口编程和485串口编程有区别否,能通用吗? DOS下BC31写485通讯需要注意些什么? 有好点的类库推荐下吗? 谢谢!PS:我的双机是两个PC104…

查看全部问答>

用595驱动16*16点阵遇到很奇怪的问题,实在没检查出问题,在线等

这是程序 #include sbit ser = P3^7; sbit OE = P3^6; sbit RCK = P3^5; sbit SCK = P3^4; sbit G1 = P2^0; sbit G2 = P2^1; char code tab[]= {         0x02,0x00,0x04,0x00,0x1F,0xFF,0xE0,0x00,       ...…

查看全部问答>

DSP包含BIOS系统工程编译出错!

用CCSv4.0编译包含bios系统的工程,出现如下错误: fatal error: file \"D:/Program Files/Texas   Instruments/bios_5_41_02_14/packages/ti/bios/lib/bios.a28FP<clk.o28FP>\"   specifies ISA revision \"C28FPU32\", ...…

查看全部问答>

430学习经验

1.首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。   0-0xf特殊功能寄存器;0x1 ...…

查看全部问答>

关于MSP430G2231晶振问题

用示波器测P1.0脚观察ACLK输出,发现波形不是方波,频率一直在变从8HZ变到26K,难道是我芯片坏了吗?用万用表测试没有烧,在线等求助…

查看全部问答>

死循环的发生

在使用launchpad仿真时MSP430G2553时经常会出现变量参数溢出导致死循环,有没有哪位兄弟出现过这种问题啊, 例如void delay(uchar num) { while(num) num--; } 经常进入这里导致死循环。大家讨论下关于什么情况下会出现死循环吧…

查看全部问答>