[单片机芯片] 【CH32X035评估板测评】+串口

[复制链接]
 楼主| meiyaolei 发表于 2023-10-18 00:05 | 显示全部楼层 |阅读模式
在百度中查了一下,理解了一下这个串口,看字面意思与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库函数。
  1. #include "hal_board.h"  
  2. #include "hal_uart.h"  
  3. #include "hal_key.h"  
  4. #include "stdio.h"  
  5.   
  6. #define UART_PORT HAL_UART_PORT_1   // 串口选择,UART1  
  7. #define BAUD_RATE HAL_UART_BR_115200  // 波特率,115200  
  8. #define PUT_CHAR HAL_UART_WriteChar   // 发送字符函数  
  9. #define GET_CHAR HAL_UART_ReadChar    // 接收字符函数  
  10. #define CHECK_UART_ERROR() do{} while(0)  // 错误检查函数,本例中不进行错误检查  
  11.   
  12. int main(void)  
  13. {  
  14.     // 初始化串口  
  15.     HAL_UART_Init(UART_PORT, BAUD_RATE);  
  16.     // 循环检测是否有按键按下,如果有则发送相应的字符  
  17.     while (1) {  
  18.         if (HAL_KEY_GetState(KEY_USER) == KEY_STATE_ON) { // USER键按下时,向串口发送字符'A'  
  19.             PUT_CHAR(UART_PORT, 'A');  
  20.             CHECK_UART_ERROR(); // 错误检查  
  21.         }  
  22.     }  
  23. }
来个总框架:
1697558269263.jpg

APB1 外设复位寄存器
1697558332408.jpg
串口的配置:
1697558382804.jpg
串口框架:
1697558456383.jpg
时序:
1697558486008.jpg
寄存器:
1697558517404.jpg
相关代码:
  1. GPIO_InitTypeDef  GPIO_InitStructure;
  2.     USART_InitTypeDef USART_InitStructure;

  3. #if(DEBUG == DEBUG_UART1)
  4.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOB, ENABLE);

  5.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  6.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  8.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  9. #elif(DEBUG == DEBUG_UART2)
  10.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  11.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  12.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  13.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  15.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  16. #elif(DEBUG == DEBUG_UART3)
  17.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  18.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  19.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  20.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  21.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  22.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  23. #endif

  24.     USART_InitStructure.USART_BaudRate = baudrate;
  25.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  26.     USART_InitStructure.USART_StopBits = USART_StopBits_1;
  27.     USART_InitStructure.USART_Parity = USART_Parity_No;
  28.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  29.     USART_InitStructure.USART_Mode = USART_Mode_Tx;

  30. #if(DEBUG == DEBUG_UART1)
  31.     USART_Init(USART1, &USART_InitStructure);
  32.     USART_Cmd(USART1, ENABLE);

  33. #elif(DEBUG == DEBUG_UART2)
  34.     USART_Init(USART2, &USART_InitStructure);
  35.     USART_Cmd(USART2, ENABLE);

  36. #elif(DEBUG == DEBUG_UART3)
  37.     USART_Init(USART3, &USART_InitStructure);
  38.     USART_Cmd(USART3, ENABLE);

  39. #endif

  40.     printf("SystemClk:%d\r\n", SystemCoreClock);
  41.     printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
输出结果:
1697558663987.jpg


评论

不错,赞一个  发表于 2023-10-30 21:49
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

258

主题

829

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部
认证:工程师
简介:超越自我,为设计激发灵感和想象。

258

主题

829

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部