电子说
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | CTS | LBD | TXE | TC | RXNE | IDLE | ORE | NE | FE | PE |
Bit 9:CTS标志(如果设置了CTSE位,当nCTS输入变化状态时,该位被硬件置高,由软件将其清零)
0:nCTS状态线上没有变化
1:nCTS状态线上发生变化
Bit 8:LIN断开检测标志(当探测到LIN断开时,该位由硬件置1,由软件将其清零)
0:没有检测到LIN断开
1:检测到LIN断开
Bit 7:发送数据寄存器空
当TDR寄存器中的数据被硬件转移到移位寄存器时,该位被硬件置位,对USART_DR的写操作,将该位清零。
0:数据还没有被转移到移位寄存器
1:数据已经被转移到移位寄存器
Bit 6:发送完成
当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。然后写入USART_DR清除该位。
0:发送还未完成
1:发送完成
Bit 5:读数据寄存器非空
当数据被转移到USART_DR寄存器中,该位被硬件置位。对USART_DR读操作可以将该位清零。
0:数据没有收到;
1:收到数据,可以读出
Bit 4:检测到总线空闲
当检测到总线空闲时,该位被硬件置位,则产生中断。先读USART_SR,然后读USART_DR清除该位。
0:没有检测到空闲总线
1:检测到空闲总线
Bit 3:过载错误
当RXNE仍然是1的时候,当前被接收在移位寄存器中的数据,需要传送至RDR寄存器时,硬件将该位置位,先读USART_SR,然后读USART_CR清零。
0:没有过载错误
1:检测到过载错误
Bit 2:噪声错误标志
在接收到的帧检测到噪音时,由硬件对该位置位。先读USART_SR,再读USART_DR清0。
0:没有检测到噪声
1:检测到噪声
Bit 1:帧错误
当检测到同步错位,过多的噪声或者检测到断开符,该位被硬件置位。先读USART_SR,再读USART_DR清零
0:没有检测到帧错误
1:检测到帧错误或者break符
Bit 0:校验错误
在接收模式下,如果出现奇偶校验错误,硬件对该位置位。依次读USART_SR和USART_DR清零,在清除PE位前,软件必须等待RXNE标志位被置1。
0:没有奇偶校验错误;
1:奇偶校验错误
学习C语言的时候会经常用到一个函数,就是格式化输出printf,这个函数的源代码如下所示。
从上图可以看出来,printf函数实际上的核心是putchar函数,在KEIL中,由于我们使用了MicroLIB,所以putchar函数改为了fputc函数,此时,我们只需要修改fputc函数就可以完成printf重定向,重定向代码如下图所示。
使用printf函数将串口接收到的字符串发送出去。
(1)底层寄存器文件stm32f10x.h添加串口寄存器地址。
(2)在SYSTEM目录下新建usart1目录,并在usart1目录下新建usart1.c和usart1.h两个文件。
(3)将usart1.c和usart1.h两个文件加入工程。
(4)在usart1.c文件内写入以下代码。
(5)在usart1.h添加以下代码。
(5)在1.c文件中添加以下代码。
全部0条评论
快来发表一下你的评论吧 !