在百度中查了一下,理解了一下这个串口,看字面意思与ST差不多,这里略过,以示例为准。 CH32X035的串口收发实验 CH32X035系列微控制器有4组通用同步异步收发器(USART1/2/3/4)。下面以USART1为例,简单介绍串口收发实验。 一、USART1的引脚定义 USART1的TX和RX分别连接至串口转USB芯片(如CH431)的RXD和TXD引脚。另外USART1还需要接时钟(P1^7)和复位(P1^6)。 二、USART1的初始化 三、串口收发程序示例 以下是简单的串口收发程序示例,其中用到了HAL库函数。 - #include "hal_board.h"
- #include "hal_uart.h"
- #include "hal_key.h"
- #include "stdio.h"
-
- #define UART_PORT HAL_UART_PORT_1 // 串口选择,UART1
- #define BAUD_RATE HAL_UART_BR_115200 // 波特率,115200
- #define PUT_CHAR HAL_UART_WriteChar // 发送字符函数
- #define GET_CHAR HAL_UART_ReadChar // 接收字符函数
- #define CHECK_UART_ERROR() do{} while(0) // 错误检查函数,本例中不进行错误检查
-
- int main(void)
- {
- // 初始化串口
- HAL_UART_Init(UART_PORT, BAUD_RATE);
- // 循环检测是否有按键按下,如果有则发送相应的字符
- while (1) {
- if (HAL_KEY_GetState(KEY_USER) == KEY_STATE_ON) { // USER键按下时,向串口发送字符'A'
- PUT_CHAR(UART_PORT, 'A');
- CHECK_UART_ERROR(); // 错误检查
- }
- }
- }
来个总框架:
APB1 外设复位寄存器 串口的配置: 串口框架: 时序: 寄存器: 相关代码: - GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- #if(DEBUG == DEBUG_UART1)
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- #elif(DEBUG == DEBUG_UART2)
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- #elif(DEBUG == DEBUG_UART3)
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- #endif
- USART_InitStructure.USART_BaudRate = baudrate;
- 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_None;
- USART_InitStructure.USART_Mode = USART_Mode_Tx;
- #if(DEBUG == DEBUG_UART1)
- USART_Init(USART1, &USART_InitStructure);
- USART_Cmd(USART1, ENABLE);
- #elif(DEBUG == DEBUG_UART2)
- USART_Init(USART2, &USART_InitStructure);
- USART_Cmd(USART2, ENABLE);
- #elif(DEBUG == DEBUG_UART3)
- USART_Init(USART3, &USART_InitStructure);
- USART_Cmd(USART3, ENABLE);
- #endif
- printf("SystemClk:%d\r\n", SystemCoreClock);
- printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
输出结果:
|