STM32F103串口通信寄存器设置.docx_第1页
STM32F103串口通信寄存器设置.docx_第2页
STM32F103串口通信寄存器设置.docx_第3页
STM32F103串口通信寄存器设置.docx_第4页
STM32F103串口通信寄存器设置.docx_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STM32f103寄存器配置串口通信主程序接收数据,上位机串口发送的数据已回车键结束,单片机接之后将所有数据发回。#include stm32f10x_lib.h#include sys.h/#include ioshezhi_jb.hunsigned char res; /串口接受数据临时存储unsigned char enddd=0; /接受完成标志unsigned int len=0; /数据长度unsigned char shubiao200; /数据存储表,限制长度为200字节unsigned int t; /通信数据操作for循环控制unsigned long i=0;int main() Stm32_Clock_Init(); /系统时钟设置/io_init(); /io时钟以及输入输出选项设置RCC-APB2ENR|=0x4000; /开启USART1时钟;RCC-APB2ENR|=0x0004; /开启GPIOA口时钟;GPIOA-CRH&=0xfffff00f; /PA9、PA10IO设置清零GPIOA-CRH|=0x000008b0; /P9推挽输出,max50MHZ;P10上拉输入RCC-APB2RSTR|=0x4000; /串口复位 RCC-APB2RSTR&=0xbfff; /串口停止复位 /USART1-BRR=0x1d4c; /主频72M时,波特率为9600 USART1-BRR=0x0ea6; /主频36M时,波特率为9600/USART1-BRR=0x0139; /主频36M时,波特率为115200/USART1-CR1|=0x200c; /串口开,发送长度8字节,无校验,发送开,接收开;USART1-CR1|=0x340c; /串口开,发送长度9字节,偶校验,发送开,接收开; /(有效数据还是8位长度) while (1) / shuru_init();/计算输入口的值 if(0x0020=(USART1-SR)&0x0020) /如果接受到了一个字节的数据 res=USART1-DR; /读取串口寄存器数据并存在临时位置res if(res!=0x0a)shubiaolen=res;len+; /如果该数据不是回车符的最后一个/字节0x0a,则存入数表 elseif(shubiaolen-1=0x0d)enddd=1;len-;/如果是0x0a,则判断前一个字符是不是0x0d,(回车符ASCII码为0x0a0d) /是的话则标记接受完成标志eddd并删掉已接受到的前一个字节的数据 if(enddd=1) /如果接受完成了 for(t=0;tDR=shubiaot; / while(USART1-SR&0X40)=0); /等待当前字节数据发送结束 ; enddd=0; for(t=0;tAPB2ENR 参考不完全手册P108页面需要开启的PORTA和USART1的时钟使能位,分别在 bit2 和 bit14,只要将这两位置 1 就可以使能 PORTA和USART1的时钟了。寄存器各位功能定义如下:、 串口复位寄存器 RCC-APB2RSTR 参考不完全手册P124页面 串口 1 的复位是通过配置APB2RSTR寄存器的第14位来实现的。APB2RSTR寄存器的各位描述如图8.1.1所示。串口的复位设置位在APB2RSTR的第14位,通过向该位写1复位串口1,写0结束复位。其他串口的复位位在 APB1RSTR 里面。 波特率设置寄存器 USART1-BRR参考不完全手册P100页面STM32 的每个串口都有一个自己独立的波特率寄存器 USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的。USART_BRR 的最低 4 位( 位3:0) 用来存放小数部分 DIV_Fraction, 紧接着的 12 位( 位15:4) 用来存放整数部分 DIV_Mantissa,最高 16 位未使用。计算方法为:首先计算DIV =主频/(波特率*16)比如主频为36MHZ,波特率要设置为115200时,则DIV=36000000/(115200*16)=19.53125;整数部分DIV_Mantissa=19=0x13; 小数部分DIV_Fraction=0.53125*16=8.5;取9,即0x9;故USART1-BRR=0x0139 发送接收数据格式以及串口开关设置 USART1-CR1 参考中文手册542页STM32 的每个串口都有 3 个控制寄存器 USART_CR13,串口的很多配置都是通过这 3 个寄存器来设置的。这里我们只要用到 USART_CR1 就可以实现我们的功能了,该寄存器的各位描述如下图所示:该寄存器的高 18 位没有用到,低 14 位用于串口的功能设置。 13 UE 为串口使能位。1:开启串口功能;0:关闭。12 M 为字长选择位。0:串口数据寄存器USART_DR收发数据长度为8个字长外加1个停止位; 1:9位长度,1个停止位11. 唤醒方式选择位。0:被空闲总线唤醒;1:被地址标记唤醒。(这里默认设置为0)10 PCE 为校验使能位。0:禁止校验;1:使能校验。9 PS 为校验位选择。 0:偶校验;1:奇校验。 8. PE中断使能。0:禁止产生中断;1:当USART_SR中PE为1时产生串口中断。默认07 TXIE为发送缓冲区空中断使能位。1:当USART_SR中的TXE位为1时将产生串口中断。6. TCIE 为发送完成中断使能位。 1:当USART_SR中的TC位为1时将产生串口中断。5. RXNEIE 为接收缓冲区非空中断使能。1:当USART_SR中的ORE或者RXNE位为 1 时将产生串口中断。4. 接收缓冲区非空中断使能。0:禁止产生中断;1:当USART_SR中的ORE或者RXNE为1时,产生串口中断。(这里默认设置为0)3. TE 为发送使能位。1:开启串口的发送功能。2. RE 为接收使能位。1:开启串口的接收功能。1. 接收唤醒。该位用来决定是否把USART置于静默模式。当唤醒序列到来时,硬件会将其清零。0:接收器处于正常工作模式;1:接收器处于静默模式。注意: 1在把USART置于静默模式(设置RWU位)之前, USART要已经先接收了一个数据字节。否则在静默模式下,不能被空闲总线检测唤醒。2当配置成地址标记检测唤醒(WAKE位=1),在RXNE位被置位时,不能用软件修改RWU位。(这里不用管,默认设置为0)0. 发送断开帧。(这里不用管,默认设置为0)、 串口状态寄存器 USART1-SR 参考中文手册540页串口的状态可以通过状态寄存器 USART_SR 读取。 USART_SR 的各位描述如下图所示这里我们关注一下两个位,第 5、 6 位 RXNE 和 TC6. TC为发送完成标志位。当该位被置1时,表示 USART_DR 内的数据已经发送完了。如果设置了这个位的中断,则会产生中断。该位有两种清零方式: 1)写USART_DR; 2)直接向该位写 0。5. RXNE为读数据寄存器。当该位被置1时,表示USART_DR已经有数据接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将该位清零,也可以向该位写 0直接清除。、 串口数据存储寄存器 USART1-DR 参考不完全手册125页STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。该寄存器的各位描述如下图所示它是由两个寄存器组成的,一个给发送用(TDR),一个给接收用(RDR),该寄存器兼具读和写的功能。 TDR 寄存器提供了内部总线和输出移位寄存器之间的并行接口。 RDR 寄存器提供了输入移位寄存器和内部总线之间的并行接口。当使能校验位(USART_CR1 中 PCE 位被置位)进行发送时,写到 MSB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论