在百度中查了一下,理解了一下这个串口,看字面意思与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() );
输出结果:
|
不错,赞一个