提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
主要依据peripheral例程,学习CH573串口UART1工作流程。
一、使用步骤
1.引入库
SetSysClock(CLK_SOURCE_PLL_60MHz);
初始化晶振,这个不多说了:
2.UART1的管脚初始化
GPIOA_SetBits(bTXD1);
单独把PA9拉高了。
GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
单独设置了PA9,1:引脚为输出模式;PA 引脚电流驱动能力5mA 级别。
2.UART1的串口配置
UART1_DefInit();
这部分是难点 UART1_BaudRateCfg(115200);这块主要是通过赋值波特率除数锁存器,来达到波特率的设置。
公式:除数 = 串口内部基准时钟 Fuart / 16 / 所需通讯波特率。
先乘10后除10的操作能理解,但除数只除了个8,然后乘10加5再除10就理解不了啦。也许是晶振补偿,能力有限理解不了此处的操作,欢迎有懂的朋友指正。
R8_UART1_FCR : FIFO 控制寄存器
// 接收 FIFO 的中断和硬件流控制的触发点选择:10:4 字节;
//即接收满 4 个字节产生接收数据可用的中断,并在使能硬件流控制时自动
//无效RTS 引脚。
RB_FCR_TX_FIFO_CLR、RB_FCR_RX_FIFO_CLR
//发送、接收 FIFO 数据清空使能位,自动清零
RB_FCR_FIFO_EN //启用 8 字节 FIFO
R8_UART1_LCR : 线路控制寄存器
//RB_LCR_WORD_SZ 串口数据长度 11:8 个数据位
R8_UART1_IER :中断使能寄存器
//RB_IER_TXD_EN 串口 TXD 引脚输出使能位
R8_UART1_DIV : 预分频除数寄存器
//用于计算串口的内部基准时钟,低 7 位有效。
//公式:除数 = Fsys * 2 / 串口内部基准时钟,最大值 127。
3.UART1的发送
PRINT("%s\n", VER_LIB);
这里用了print重定义,#define PRINT(X…) printf(X)
int printf (const char *__restrict, …)
_ATTRIBUTE ((format (printf, 1, 2)));
总结
总的来说还是挺简洁的,跟STM32代码比起来,寄存器的配置都大同小异,不过习惯了库函数可能不太习惯类似51的配置方法,基本知道怎么用就行!