[通用ARM系列] 芯圣CS32F103 MCU的应用与代码实现

[复制链接]
 楼主| 周半梅 发表于 2024-10-13 08:05 | 显示全部楼层 |阅读模式

芯圣科技的CS32F103系列MCU以其高性价比和丰富的外设接口,在嵌入式领域得到了广泛应用。它兼容STM32的生态系统,拥有类似的架构和外设,是开发者在嵌入式项目中的一个理想选择。本帖将通过CS32F103的UART通信示例,演示如何使用芯圣MCU与其他设备进行串口数据传输。

实现功能我们将配置CS32F103的UART接口,与PC串口终端通信,实现发送和接收字符串数据。此应用常用于设备调试或与其他微控制器通信。

硬件连接
  • CS32F103C8T6 MCU开发板
  • USB转TTL模块,用于连接PC
  • PC串口工具(如SecureCRT或SSCOM)
UART的TX和RX分别与USB转TTL模块的RX和TX交叉连接。

开发环境
  • 开发工具:Keil uVision 5
  • 编程语言:C语言
  • 固件库:芯圣CS32 HAL库

代码实现
  1. #include "cs32f0xx_hal.h"
  2. #include "usart.h"
  3. #include "gpio.h"

  4. // 初始化UART1
  5. void MX_USART1_UART_Init(void)
  6. {
  7.     huart1.Instance = USART1;
  8.     huart1.Init.BaudRate = 115200;
  9.     huart1.Init.WordLength = UART_WORDLENGTH_8B;
  10.     huart1.Init.StopBits = UART_STOPBITS_1;
  11.     huart1.Init.Parity = UART_PARITY_NONE;
  12.     huart1.Init.Mode = UART_MODE_TX_RX;
  13.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  14.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  15.     if (HAL_UART_Init(&huart1) != HAL_OK)
  16.     {
  17.         Error_Handler();
  18.     }
  19. }

  20. // 发送字符串
  21. void UART_SendString(UART_HandleTypeDef *huart, const char *str)
  22. {
  23.     HAL_UART_Transmit(huart, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
  24. }

  25. // 接收字符
  26. void UART_ReceiveChar(UART_HandleTypeDef *huart, uint8_t *data)
  27. {
  28.     HAL_UART_Receive(huart, data, 1, HAL_MAX_DELAY);
  29. }

  30. // GPIO初始化
  31. void MX_GPIO_Init(void)
  32. {
  33.     GPIO_InitTypeDef GPIO_InitStruct = {0};

  34.     // 使能GPIO时钟
  35.     __HAL_RCC_GPIOA_CLK_ENABLE();

  36.     // 配置UART引脚:PA9->TX, PA10->RX
  37.     GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
  38.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  39.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  40.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  41.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  42. }

  43. // 主函数
  44. int main(void)
  45. {
  46.     HAL_Init();               // 初始化HAL库
  47.     SystemClock_Config();      // 配置系统时钟
  48.     MX_GPIO_Init();            // 初始化GPIO
  49.     MX_USART1_UART_Init();     // 初始化UART

  50.     uint8_t received_data;
  51.     const char *welcome_msg = "CS32F103 UART Communication Initialized.\r\n";
  52.    
  53.     // 发送欢迎信息
  54.     UART_SendString(&huart1, welcome_msg);

  55.     while (1)
  56.     {
  57.         // 接收一个字符并回显
  58.         UART_ReceiveChar(&huart1, &received_data);
  59.         HAL_UART_Transmit(&huart1, &received_data, 1, HAL_MAX_DELAY);
  60.     }
  61. }

代码解析
  • UART初始化:通过MX_USART1_UART_Init()配置UART1的波特率、数据位、停止位等参数,确保通信稳定。
  • GPIO配置:PA9和PA10分别作为UART1的TX和RX引脚,与USB转TTL模块连接。
  • 发送与接收:通过UART_SendString()发送字符串数据,并在while循环中实现接收和回显功能。PC端发送的字符将被MCU接收并立即返回。

功能扩展
  • 多UART通信:CS32F103支持多个UART接口,可同时连接多个设备,实现多点通信。
  • 中断方式接收:可使用中断模式接收数据,避免在循环中轮询,提高效率。
  • 与其他外设结合:可将UART通信与传感器结合,实现传感数据的实时传输。

小结通过本示例,我们实现了CS32F103 MCU与PC串口终端的通信功能。UART作为一种常用的串行通信方式,广泛应用于数据传输和设备调试。在开发中,利用芯圣MCU丰富的外设资源,开发者可以轻松构建高效的嵌入式系统。

公羊子丹 发表于 2024-10-13 08:06 | 显示全部楼层
这个UART的例子正好解决了我最近调试设备的痛点,非常感谢!
帛灿灿 发表于 2024-10-13 08:06 | 显示全部楼层
感觉芯圣MCU的性价比超高,用来做项目太合适了。
童雨竹 发表于 2024-10-13 08:06 | 显示全部楼层
请问多点通信怎么实现?多个设备能同时通过UART连上吗?
万图 发表于 2024-10-13 08:06 | 显示全部楼层
这代码里用HAL库,感觉开发变简单了不少,比裸机写舒服。
Wordsworth 发表于 2024-10-13 08:07 | 显示全部楼层
如果串口收发数据不稳定,可能是波特率设置的问题吗?
Pulitzer 发表于 2024-10-13 08:07 | 显示全部楼层
我试了一下这个例子,结果数据回显很顺畅,没有一点延迟。
Bblythe 发表于 2024-10-13 08:07 | 显示全部楼层
有没有人用过DMA模式的UART?好像能进一步提高效率。
Uriah 发表于 2024-10-13 08:08 | 显示全部楼层
这个开发板好像和STM32的差不多,连驱动都能复用。
Clyde011 发表于 2024-10-13 08:08 | 显示全部楼层
HAL库用起来虽然简单,但是用中断感觉还是能提升性能。
chenqianqian 发表于 2024-10-14 07:59 来自手机 | 显示全部楼层
现在国产MCU这么卷,身边人很少听说用芯圣的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

149

主题

5762

帖子

1

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

149

主题

5762

帖子

1

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