提示:文章
文章目录
前言
前期疑问:
1、一开始没有搞明白到底是USART还是UART。
2、其中还涉及到一个同步的概念。同步就是是否有时钟线同步。USART是串口同步异步发送接收器。USART没有时钟线是怎么实现同步的。
3、是在中断中读数据和发数据吗,如果是的话是怎么开启中断的或者是怎么实现中断中发送接收的。
应该是有是USART_IRQn中断吧,利用USART_IRQn中断吗?
4、stm32f10x手册里面的有时钟线的图叫什么图的?
**本文目标:**实现USART通讯。实现protues仿真通讯数据显示。
疑问解答
1、是USART,USART是同步通讯。一般使用串口通讯的时候都是设置波特率的,设置波特率就是使用了时钟。有时钟就是同步通讯。虽然USART只有两根线,但是USART中接入了一根时钟线,给USART提供同步时钟。所以USRAT编程时其中一部分也是要开启时钟。
【此处应该有一张USART电路图。是叫电路图吗?】
2、USART没有时钟线是怎么实现同步的? 内部提供时钟。
3、发送不需要中断,虽然发送是有中断的。发送中断是能寄存器应该是TXIE。但是接收是一定在中断中接收的。为什么?因为如果不是在中断中接收,那USART就要不断轮询接收信号,占用CPU,所以要中断来接收数据。同理按键中断检测信号。
一、背景
最近
二、梳理串口流程
https://blog.csdn.net/qq_40791635/article/details/83038678
2.1 软件开发
2.2 protues仿真
protues仿真没有实现
2.3 keil软件仿真
keil仿真,选择UART#1实现数据打印
说明本身程序没有太大问题,那为什么没有在protues仿真成功呢,哔哩哔哩、百度查查看
2.4 protues实现串口打印
实现串口打印:
提交记录:
SHA-1: a6b5d909c5726dc3472f42aa1b5e2ccb95b60bdd
- protues串口可以正常打印,需要注释掉两个函数
参考这篇教程实现串口打印
https://blog.csdn.net/weixin_48220838/article/details/128975779
遗留问题:
①实现rx中断
②为什么添加两个函数就不能打印了
③如何配置外部晶振时钟正常打印
④rx接受实验
2.5 配置成HSI二分频配置PLLCK实现串口打印
代码:SHA-1: 64efa29730d9080fdb45a50a23e7eac242b6f274
实现串口打印和led_running闪烁。
方法:
int main(void)
{
//RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
/* LED 端口初始化 */
LED_GPIO_Config();
//按键初始化函数
gpio_init();
//EXTI按键初始化函数
bsp_exti_key_gpio_init();
bsp_exti_key_nvic_init();
bsp_exti_key_exti_init();
//RCC初始化
RCC_Init();
//USART初始化
InitGPIO();
InitUsart(); //包含了NVIC中断初始化
while (1)
{
//key_process();
rcc_led_loop();
printf("hello world\r\n");
}
}
删除RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);也是可以实现的。
2.6 protues外部晶振实现仿真
添加晶振
proteus添加晶振
在Proteus软件中添加晶振的步骤如下:1
打开Proteus软件。
在左侧组件栏中找到“P”字母开头的选项,这通常代表元件。
在“关键字”栏中输入“CRYSTAL”,这会列出所有晶振元件。
从列表中选择第一个晶振元件并点击“确定”。
此时鼠标指针会变成一个十字形,可以在图纸上拖动以放置晶振。
在合适的位置点击鼠标左键,晶振就会被添加到电路图中。
OSC32_IN、OSC32_OUT和OSCIN、OSCOUT区别:
https://blog.csdn.net/qq_52251819/article/details/134956228
注意:protues好像不能仿真晶振啊。。。。
三、
3.1
总结
未完待续