本节为——正点原子笔记,海创电子学习笔记
我们先来看看我们学习的内容
一、 串行接口的基本知识而我们今天主要说说 串行通信
而这些又是怎么样理解的?
接下来还有一个问题——即是串行通讯的同步与异步的问题
而 UART 是属于全双工 异步通讯 —— 即可以自己主动发送消息不需要对方等待,并且可以同时在两个地方同时发送,接收
SPI 为全双工 同步通讯 IIC 为半双工(只有一定时间内) 同步通讯
当然UART 也是有对应的引脚
——————————————————————————————————————————
编写流程1.串口时钟 ,GIPO时钟使能 —— RCC_ABP2PeriphClockCmd();
2.GPIO端口模式设置 —— GPIO_Init();
3.串口参数初始化 —— USART_Init();
4.开启中断并初始化NVIC —— NVIC_Iint();USART_ITConflg();
5.使能串口 —— USART_Cmd();
6.编写中断处理函数 —— USARTx_IRQHandler();
这张图片主要是针对,单片机对外发送数据 和 接收 数据 所使用的
1.得到一个标志位状态,第一个参数是指定一个串口,第二个参数是一个普通的变量
2. 和1. 是一对,是用来清除标志位的
3.获取中断状态
4.清除中断相关状态
不管接收还是发送都需要两个寄存器
接收和发送使用都是数据寄存器
整个过程由CPU 或 DMA 处理
我们对他做一个总结
———————————————————————————————————————————我们这节课就要进行简单的实验,单片机把一个简单的字符发到我们的电脑上
1.
2.
3.
我们只是简单的发送字符,没有使用中断,所以省略了中断服务函数和NVIC的配置
在主函数里调用,就可以了。
之后我们就可以在串口助手看到单片机发的 'H'了(把上面的初始化都完成后调用我们定义的函数——即 包括一系列流程的函数)
———————————————————————————————————————————
关于TXE的标志位的小知识举个好理解的例子
我们的八个人要从 A 到达 D ,但是我们不能直接到达,需要经过 B 和 C
首先呢 从 A 到 B 再到 C ,八个人都是一起行动的,但是从 C 到 D只能一个一个过
从C 到 D 的过程 就相当于我们的串行通信
——————————————————————————————————————————
关于TC标志位的小知识这个是什么意思呢?
我们理解一下 TXE 是先写入DR,然后再读SR,让下一位补上来,然后发送清空,所以我们上面程序能正常发送,但是如果是TC的话,就无法进行了,因为TC是相反的
我们看看这个,执行的是先写入DR,再读取SR
所以用TC的话,TC会读取1,而不是0,所以会直接跳转到下一行 ,而在一一行因为已经执行过了,所以会是 0
所以我们修改一下
这样字节就都出现了
————————————————————————————————————————
发送字符串功能同样用一个例子
我们再来回顾一下这个内容,所以在上面。我们首先需要4个TEX,把这些组从 B 全部 都送到 C,同时我们在最后也需要一个 TC 来让最后一个字节过去 到 D ,因为如果没TC的话,当我们的B没有字符时候,就不会再继续送了
以上是我们发送字符的库函数,接下来我们对他进行一些修改
依次发送字符串中的字符,每发送一次检查一下 TXE位,到最后的字符发完后,他就会跳出中间的while循环来到最后一个 判断TC位
int main(void)
{
LED_GPIO_Config();
delay_init();
//KEY_GPIO_Config();
//TIM2_Init(4999,7199);
My_USART1();
USART_SendString(USART1, "ROSCAR 王x ");
while(1)
{
//KEY_Scan();
//LED_Change();
};
}
这样就可以了



