STM32F10x uart初始化以及寄存器说明

发布者:量子心跳最新更新时间:2018-12-29 来源: eefocus关键字:STM32F10x  uart初始化  寄存器 手机看文章 扫描二维码
随时随地手机看文章

USART(Universal Synchronous Asynchronous Receiver Transmitter) 也就是通用同步异步收发。它根据NRZ非同步串行数据工业标准,提供了灵活的全双工数据交换功能。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及硬件控制操作(需要增加两个管脚,分别是CTS/RTS)。


这里我只简单讲讲如何用USART模块来实现标准EIA-232 串口通讯。 


我们首先使用的是硬件控制,然后以中断方式实现了uart数据的收发。 


1.uart管脚和clk初始化很简单,整个流程如下:


int main(){

      /* System Clocks Configuration *

      // 1)相应的时钟初始化

      RCC_Configuration(); /


      /* Configure the GPIO ports */

      // 2) 相应的GPIO初始化

      GPIO_Configuration(); 


        /* USART2 configuration ------------------------------------------------------*/

  /* USART2 configured as follow:

        - BaudRate = 115200 baud  

        - Word Length = 8 Bits

        - One Stop Bit

        - No parity

        - Hardware flow control enabled (RTS and CTS signals)

        - Receive and transmit enabled

  */

  // 3) uart数据结构初始化

  USART_InitStructure.USART_BaudRate = 115200;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  USART_InitStructure.USART_Parity = USART_Parity_No ;

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_RTS_CTS;

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;


  USART_Init(USART2, &USART_InitStructure);

  /* Enable the USART2 */

  USART_Cmd(USART2, ENABLE);


}



1) 对寄存器AFIO_EVCR,AFIO_MAPR和AFIO_EXTICRX进行读写操作前,应当首先打开AFIO的时钟。参考第6.3.7节APB2外设时钟使能寄存器(RCC_APB2ENR)。然后打开相应uart的clock


void RCC_Configuration(void)

{    

  /* Enable GPIOx and AFIO clocks */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx | RCC_APB2Periph_AFIO, ENABLE);


  /* Enable USART2 clocks */

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

}


2) 对Uart相关的GPIO的设置


/**

  * @brief  Configures the different GPIO ports.

  * @param  None

  * @retval None

  */

void GPIO_Configuration(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;


#if defined(USE_STM3210B_EVAL) || defined(USE_STM32100B_EVAL)

  /* Enable the USART2 Pins Software Remapping */

  GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);

#endif


  /* Configure USART2 RTS and USART2 Tx as alternate function push-pull */

  GPIO_InitStructure.GPIO_Pin = GPIO_RTSPin | GPIO_TxPin; //RTS,TX设置为输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 

  GPIO_Init(GPIOx, &GPIO_InitStructure);


  /* Configure USART2 CTS and USART2 Rx as input floating */

  GPIO_InitStructure.GPIO_Pin = GPIO_CTSPin | GPIO_RxPin; //CTS,RX设置为输入

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOx, &GPIO_InitStructure);

}



3) uart数据结构初始化


  USART_InitStructure.USART_BaudRate = 115200; //比特率

  USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据宽度

  USART_InitStructure.USART_StopBits = USART_StopBits_1; //

  USART_InitStructure.USART_Parity = USART_Parity_No ; //

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_RTS_CTS;//硬件控制模式

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收发送


  USART_Init(USART2, &USART_InitStructure);

  /* Enable the USART2 */

  USART_Cmd(USART2, ENABLE);


以上说明了简单的硬件控制的uart初始化流程。以下说明STM32F10x uart的寄存器。 

2.STM32F10x uart寄存器说明


1)status register(USART_SR)



(1) Bit 9 CTS: 如果CTSE比特被设置了的话,这一位会在CTS管脚被拉高之后被设置。这一位需要软件去清零。根据这一位的值,可以判断CTS管脚的值。 

0 : nCTS管脚没有变化 

1:nCTS管脚有过变化 

在nCTS管脚变化的时候,如果USART_CR3的CTSIE=1的话,是会产生一个中断。 

当然这都是硬件控制的部分,所以USART4和USART5是不支持的。


(2) LBD : LIN break detection flag 

如果检测到LIN break,这一位会被硬件设置为1,而且需要软件去清零。 

如果USART_CR2的LBDIE=1的话会产生一个中断。 

0 : LIN Break 没有被检测到 

1: :LIN Break 有被检测到


(3) TXE: Transmit data register empty 

如果TDR register被发送到shift register,TXE位会被设置为1。 而且如果USART_CR1的TXEIE=1的话,是会产生中断的。如果往USART_DR寄存器里写东西,这一位会被清零。 

0: data is not transferred to the shift register 

1: data is transferred to the shift register


(4) TC: Transmissino complete 

如果一个一帧(frame)的数据传输完毕,而且TXE被设置为1了的话,这一位会被设置为1。如果USART_CR1的TCIE=1的话,是会产生中断的。这一位会被连续的软件操作给清零(往USART_DR写,紧接着再从USART_SR寄存器读),当然这种操作只是在multibuffer通信的时候才推荐的。TC寄存器也可以软件写0请清楚。 

0:Transmission is not complete 

1:Transmission is complete


(5) RXNE: Read data register not empty 

如果RDR shift register的内容已经传送到USART_DR,则这个值就会被设置。如果USART_CR1的RXNEIE=1,则会有中断产生。读USART_DR寄存器,会清楚这个寄存器。 

当然RXNE这位也可以软件清零,但这种方式只是在multibuffer通信的时候才推荐。


(6) IDLE: IDLE line detected 

如果IDLE line被检测到,则硬件会设置这一位。如果USART_CR1的IDLEIE=1的话,设置这一位的同时会产生一个中断。软件操作会清楚这一位(读USART_DR,紧接着写USART_SR)。


(7) ORE:Overrrun error 

如果当前收到的shift register的内容准备好可以传送给RDR register,且RXNE=1的时候,ORE这一位就会被硬件设置为1。如果USART_CR1的RXNEIE=1,则会产生一个中断。这位会被下列软件操作清零(读USART_DR,紧接着读USART_DR) 

0: No Overrun error 

1: Overrun error is detected 

注:这位被设置为1,RDR register不会丢失但shift register会被覆盖。


(8) NF: Noise detected flag 

如果收到的帧检测到噪声,这一位就会被设置。这一位会被如下软件操作清零(读USART_DR,紧接着读USART_SR)


(9) FE: Framing error 

这一位在同步失败(de-synchronization),噪音超标或者数据损坏的时候被设置。读USART_DR,紧接着读USART_SR会清零。 

0: No framing error is detected 

1: Framing error or break character is detected


(10) PE: Parity error 

parity error(奇偶校验失败??)的时候,这一位就被设置为1。读写USART_DR,紧接着读status register会把这位清零。


2) Data Register(USART_DR) 数据的读写都用这个寄存器

Address offset: 0x04 

Reset value: 0xXXXXXXXX


Bits 31:9 Reserved, must be kept at reset value. 

Bits 8:0 DR[8:0] : Dava value 

保存着读或者写的内容。这个寄存器既可以用来读,也可以用来写是因为这个寄存器是TDR和RDR两个寄存器的组合。 

如果parity使能(奇偶校验使能)的话(USART_CR1的PCE被设置),DR寄存器中的MSB(bit 7或者是bit8 ,这取决于数据的长度)是没有意义的,因为这位会被parity给取代。同理,如果parity使能了,从DR[8:0]里读出来的MSB也是parity bit,不是数据。


3) Baud Rate Register( USART_BRR)

4) Control register (USART_CR1)



(1) OVER8: Oversampling mode 

0: oversampling by 16 

1: oversampling by 8


(2) UE: USART enable 

USART使能位,这一位可以被软件设置和清零


(3) M: Word length 

这一位表示数据长度,这一位可以被软件设置或清零 

0: 1 Start bit, 8 Data bits, n Stop bit 

1: 1 Start bit, 9 Data bits, n Stop bit 

注:这一位不应该在数据传输过程中修改


(4) WAKE: Wakeup method 

表示wakeup method,可以被软件修改 

0: Idle Line 

1: Address Mark


(5) PCE: Parity control enable 

这一位选择parity control(generation and detection)。 如果parity control使能了,计算出来的parity会被写到MSB位置(9th bit if M=1; 8th bit if M=0),且接收到的数据会被检查parity。这一位可以被软件设置或清零。 

0: parity control disabled 

1: parity control enabled


(6) PS: Parity selection 

如果parity generation/detection使能的话(PCE bit set),会根据PS选择是奇数还是偶数校验。 

0: Even parity 

1: Odd parity


(7) PEIE: PE interrupt enable 

这位可以被软件读写 

0: interrupt is inhibited 

1: An USART interrupt is generated whenever PE=1 in the USART_SR register.


(8) TXEIE : TXE interrupt enable 

This bit is set and cleared by software. 

0: Interrupt is inhibited 

1: An USART interrupt is generated whenever TXE=1 in the USART_SR register


(9) TCIE: Transmission comple te interrupt enable 

This bit is set and cleared by software. 

0: Interrupt is inhibited 

1: An USART interrupt is generated whenever TC=1 in the USART_SR register


(10) RXNEIE: RXNE interrupt enable 

This bit is set and cleared by software. 

0: Interrupt is inhibited 

1: An USART interrupt is generated whenever ORE=1 or RXNE=1 in the USART_SR register


(11)IDLEIE: IDLE interrupt enable 

This bit is set and cleared by software. 

0: Interrupt is inhibited 

1: An USART interrupt is generated whenever IDLE=1 in the USART_SR register


(12) TE: Transmitter enable 

This bit enables the transmitter. It is set and cleared by software. 

0: Transmitter is disabled 

1: Transmitter is enabled


(13) RE: Receiver enable 

This bit enables the receiver. It is set and cleared by software. 

0: Receiver is disabled 

1: Receiver is enabled and begins searching for a start bit


(14) RWU: Receiver wakeup 

This bit determines if the USART is in mute mode or not. It is set and cleared by software 

and can be cleared by hardware when a wakeup sequence is recognized. 

0: Receiver in active mode 

1: Receiver in mute mode 

Note: 1: Before selecting Mute mode (by setting the RWU bit) the USART must first receive a 

data byte, otherwise it cannot function in Mute mode with wakeup by Idle line detection. 

2: In Address Mark Detection wakeup conf iguration (WAKE bit=1) the RWU bit cannot 

be modified by software while the RXNE bit is set.


(15) SBK: Send break 

This bit set is used to send break characters. It can be set and cleared by software. It should 

be set by software, and will be reset by hardware during the stop bit of break. 

0: No break character is transmitted 

1: Break character will be transmitted


5) Control register 2 (USART_CR2)



(1) LINEN: LIN mode enable 

可以被软件读写 

0: LIN mode disabled 

1: LIN mode enabled 

The LIN mode enables the capability to send LIN Synch Breaks (13 low bits) using the SBK bit in 

the USART_CR1 register, and to detect LIN Sync breaks.


(2) STOP: STOP bits 

These bits are used for programming the stop bits. 

00: 1 Stop bit 

01: 0.5 Stop bit 

10: 2 Stop bits 

11: 1.5 Stop bit


(3) CLKEN: Clock enable 

This bit allows the user to enable the SCLK pin. 

0: SCLK pin disabled 

1: SCLK pin enabled


(4) CPOL: Clock polarity 

This bit allows the user to select the polarity of the clock output on the SCLK pin in synchronous 

mode. It works in conjunction with the CPHA bit to produce the desired clock/data relationship 

0: Steady low value on SCLK pin outside transmission window. 

1: Steady high value on SCLK pin outside transmission window.


(5) CPHA : Clock phase 

This bit allows the user to select the phase of the clock output on the SCLK pin in synchronous 

mode. It works in conjunction with the CPOL bit to produce the desired clock/data relationship (see 

figures 308 to 309 ) 

0: The first clock transition is the first data capture edge 

1: The second clock transition is the first data capture edge


(6) LBCL : Last bit clock pulse 

This bit allows the user to select whether the clock pulse associated with the last data bit 

transmitted (MSB) has to be output on the SCLK pin in synchronous mode. 

0: The clock pulse of the last data bit is not output to the SCLK pin 

1: The clock pulse of the last data bit is output to the SCLK pin


(7) LBDIE : LIN break detection interrupt enable 

Break interrupt mask (break detection using break delimiter). 

0: Interrupt is inhibited 

1: An interrupt is generated whenev er LBD=1 in the USART_SR register


(8) LBDL : lin break detection length 

This bit is for selection between 11 bit or 10 bit break detection. 

0: 10-bit break detection 

1: 11-bit break detection


(9) ADD[3:0]: Address of the USART node 

This bit-field gives the address of the USART node. 

This is used in multiprocessor communication during mute mode, for wake up with address mark 

detection.


6) Control register 3( USART_CR3)



(1) ONEBIT: One sample bit method enable 

This bit allows the user to select the sample method. When the one sample bit method is 

selected the noise detection flag (NF) is disabled. 

0: Three sample bit method 

1: One sample bit method


(2) CTSIE : CTS interrupt enable 

0: Interrupt is inhibited 

1: An interrupt is generated whenever CTS=1 in the USART_SR register


(3) CTSE: CTS enable 

0: CTS hardware flow control disabled 

1: CTS mode enabled, data is only transmitted when the nCTS input is asserted (tied to 0). 

If the nCTS input is deasserted while a data is being transmitted, then the transmission is 

completed before stopping. If a data is written into the data register while nCTS is asserted, 

the transmission is postponed until nCTS is asserted


(4) RTSE: RTS enable 

0: RTS hardware flow control disabled 

1: RTS interrupt enabled, data is only requeste d when there is space in the receive buffer. 

The transmission of data is expected to cease after the current character has been 

transmitted. The nRTS output is asserted (tied to 0) when a data can be received


(5) DMAT : DMA enable transmitter 

This bit is set/reset by software 

1: DMA mode is enabled for transmission. 

0: DMA mode is disabled for transmission


(6) DMAR : DMA enable receiver 

This bit is set/reset by software 

1: DMA mode is enabled for reception 

0: DMA mode is disable for reception


(7) SCEN : Smartcard mode enable 

This bit is used for enabling Smartcard mode. 

0: Smartcard Mode disabled 

1: Smartcard Mode enabled


(8) NACK : Smartcard NACK enable 

0: NACK transmission in case of parity error is disabled 

1: NACK transmission during parity error is enabled


(9) HDSEL: Half-duplex selection 

Selection of Single-wire Half-duplex mode 

0: Half duplex mode is not selected 

1: Half duplex mode is selected


(10) IRLP: IrDA low-power 

This bit is used for selecting between normal and low-power IrDA modes 

0: Normal mode 

1: Low-power mode


(11) IREN : IrDA mode enable 

This bit is set and cleared by software. 

0: IrDA disabled 

1: IrDA enabled


(12) EIE: Error interrupt enable 

Error Interrupt Enable Bit is required to enable interrupt generation in case of a framing 

error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USART_SR register) in 

case of Multi Buffer Communication (DMAR=1 in the USART_CR3 register). 

0: Interrupt is inhibited 

1: An interrupt is generated whenever DMAR=1 in the USART_CR3 register and FE=1 or 

ORE=1 or NF=1 in the USART_SR register


在调试过程中,注意CTS和RTS的管脚设置试PULL DOWN, PULL UP,NO PULL。设置不对会导致无法上拉RTS或者没有检测到CTS被拉高,无法通信。



关键字:STM32F10x  uart初始化  寄存器 引用地址:STM32F10x uart初始化以及寄存器说明

上一篇:LPC2000 UART串口使用心得
下一篇:STM32 定时器计数器 更新事件

推荐阅读最新更新时间:2024-03-16 16:21

ATmega16 通用寄存器
文件寄存器文件针对AVR增强型RISC指令集做了优化。为了获得需要的性能和灵活性,寄存器文件支持以下的输入/ 输出方案: ·输出一个 8 位操作数,输入一个 8 位结果 ·输出两个 8 位操作数,输入一个 8 位结果 ·输出两个 8 位操作数,输入一个 16 位结果 ·输出一个 16 位操作数,输入一个 16 位结果 Figure 4 为CPU 32 个通用工作寄存器的结构。 (点击图片放大) Figure 4. AVR CPU 通用工作寄存器 大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数这样的指令的执行时间为单个时钟周期。 如Figure 4 所示,每个寄存器都有一个数据内存地址,将他们直接映射到用
[单片机]
ATmega16 通用<font color='red'>寄存器</font>
直接通过寄存器地址操作控制LED灯(定义常量标示对应寄存器)
直接通过地址常量对应给寄存器赋值的方式是最简捷的方式,但程序的可读性极差(不容易地址常量值得知是对应哪个寄存器),程序的可移植性差,为了提高程序的可读性和可移植性,通常预定义符号常量和符号变量。 void SystemInit() { } void delay(int t) { int i; for( ;t 0; t--) for(i=0;i 1000;i++); } int main() { *((unsigned int *)0x40021018) |= 0x1 4; //开启GPIOC时钟 *((unsigned int *)0x40
[单片机]
STM32总结一 STM32三种点亮LED灯方式的不同之处
STM32点亮LED灯有很多种方法。 第一种是操作寄存器来点亮LED灯,(以GPIOC的第一个LED为例)操作的方法是首先在中文手册,首先要声明的是,手册里面看到的地址,都是字节,表示第多少多少个字节,然后这个数字对应一个字节位,所以每一个32位的寄存器占四个字节,找到block2(这个是外设区,所有的外设地址都在这个区)的基地址,然后加上第一段偏移地址,就越过APB1总线的内存区,到达了APB2总线这个区的基地址。然后再加上相对于APB2的偏移地址就可以定位出某个特定外设的基地址,这里所指的是GPIOC端口的基地址,然后再在这个端口外设基地址的基础上,加上相应的偏移地址,就可以定义出这个端口的寄存器地址,这些寄存器是紧紧的挨
[单片机]
STM32总结一 STM32三种点亮LED灯方式的不同之处
单片机系统资源—指令寄存器、指令译码器
  指令寄存器用来保存当前正在执行的一个指令。   当执行一条指令时,先把它内存取出,然后再传送到指令寄存器。   指令分为操作码和操作数,由二进制数字组成。当执行任何给定的指令,必须对操作码进行译码,以便确定所要求的操作。指令译码器就是负责这项工作的,指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发出具体操作的特定信号。
[单片机]
EDMA在实时图像处理系统中的应用
1 引言    数字图像处理技术在科学研究、工业生产和管理部门中得到越来越多的应用。在目标跟踪、机器人导航、自动驾驶、交通监视等领域中的应用也极大地促进了实时图像处理技术的发展。实时应用要求实时图像处理系统必须具有强大的运算功能。DM642(TMS320DM642)型处理器是TI最新推出的面向多媒体处理领域的数字信号处理器(DSP).给多媒体设备的实现提供了另一种有效的手段。DM642建立在C64x DSP核基础上.采用德州仪器公司开发的第二代高性能的先进的超长指令字结构VeloeiTl.2TM,在600MHz的时钟频率下.DM642每秒可以进行24亿次16位的乘累加或48亿次的8位的乘累加。这样强大的运算能力使得DM642可以进
[嵌入式]
STM8中 TIME4寄存器的应用
STM8系统复位后,所有外设时钟均处于开的状态。用户可以通过清除CLK_PCKENR1或 CLK_PCKENR2中的PCKEN位来关闭相应的外设是时钟。 时钟分频寄存器 (CLK_CKDIVR) 如果一个引脚只具有电平的输出能力,称该引脚为输出引脚或驱动引脚; 如果一个引脚具有电平的输入能力,则称该引脚为输入引脚。 同时具备输入和输出能力的引脚称为通用引脚。 引脚输出高电平时形成的电流称为拉电流; 引脚输出低电平时形成的电流称为灌电流; 基本型定时器(TIM4/TIM6) TIME4可以作为时基发生器 @inline static void tick_init(void) { TIM4- PSCR = TIM4_PRE
[单片机]
S3C2440 点灯
点亮开发板上的led灯,需先查看原理图,找到对应引脚,以及搞清楚原理图,如何电路上灯会亮。 1、看原理图 JZ2440v2_sch.pdf 找到对应的引脚 nLED_1 对应 GPF4 nLED_2 对应 GPF5 nLED_4 对应 GPF6 2、看芯片手册 S3C2440A_UserManual_Rev13.pdf 设置对应 I/O 寄存器 CPFCON 控制寄存器 GPFCON 数据寄存器 将引脚对应控制寄存器设置为输出,数据寄存器设置为0(表示输出低电平),即可点亮对应LED灯 汇编点亮nLED_1代码如下: .global _start _start: LDR R0,=0x560000
[单片机]
FPGA与DSl8820型温度传感器通信的实现
l 引言    DS18B20是DALLAS公司生产的一线式数字温度传感器,采用3引脚T0-92型小体积封装;温度测量范围为-55℃~+125~C,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。   一线式(1-WIRE)串行总线是利用1条信号线就可以与总线上若干器件进行通信。具体应用中可以利用微处理器的I/O端口对DS18B20直接进行通信,也可以通过现场可编程门阵列(FPGA)等可编程逻辑器件(PLD)实现对1-WIRE器件的通信。   本文介绍利用ACTEL公司的ProASICplus系列FPGA实现与DS18B20的通信功能。FPGA可以将读出DS18B20
[传感技术]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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