打印
[单片机芯片]

【CH32X035评估板测评】+串口

[复制链接]
1642|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在百度中查了一下,理解了一下这个串口,看字面意思与ST差不多,这里略过,以示例为准。
CH32X035的串口收发实验
CH32X035系列微控制器有4组通用同步异步收发器(USART1/2/3/4)。下面以USART1为例,简单介绍串口收发实验。
一、USART1的引脚定义
USART1的TX和RX分别连接至串口转USB芯片(如CH431)的RXD和TXD引脚。另外USART1还需要接时钟(P1^7)和复位(P1^6)。
二、USART1的初始化
  • 使能USART1时钟:通过P1^6使能USART1的时钟。
  • 设置USART1参数:包括波特率、数据位、停止位、校验位等。
  • 使能USART1:通过P1^7使能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() );
输出结果:


使用特权

评论回复
评论
forgot 2023-10-30 21:49 回复TA
不错,赞一个 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

156

主题

640

帖子

3

粉丝