[应用方案] 基于芯圣MCU的UART串口通信示例代码解析

[复制链接]
5623|10
 楼主| 万图 发表于 2024-10-4 16:18 | 显示全部楼层 |阅读模式

在这篇文章中,我将分享如何使用芯圣MCU进行UART串口通信的简单应用。UART是嵌入式系统中非常常用的通信方式,几乎每个项目都会用到。因此,掌握UART通信是非常重要的。下面通过一个简单的UART发送与接收数据的示例代码,来帮助大家快速上手。

硬件连接
  • 芯圣MCU开发板(CS32系列)
  • USB转TTL模块连接到PC,用于调试串口通信

串口配置
我们要配置好串口的波特率、数据位、停止位等常规参数,在初始化后,我们可以通过串口与外部设备(例如PC)通信。

示例代码
  1. #include "cs32f0xx.h"  // 包含芯圣MCU的头文件

  2. UART_HandleTypeDef huart1;

  3. // 初始化UART配置函数
  4. void UART_Init(void) {
  5.     // 开启UART时钟
  6.     __HAL_RCC_USART1_CLK_ENABLE();
  7.    
  8.     // 配置UART参数
  9.     huart1.Instance = USART1;
  10.     huart1.Init.BaudRate = 9600;   // 波特率9600
  11.     huart1.Init.WordLength = UART_WORDLENGTH_8B;  // 数据位8位
  12.     huart1.Init.StopBits = UART_STOPBITS_1;   // 停止位1位
  13.     huart1.Init.Parity = UART_PARITY_NONE;  // 无校验位
  14.     huart1.Init.Mode = UART_MODE_TX_RX;   // 收发模式
  15.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控
  16.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  17.    
  18.     if (HAL_UART_Init(&huart1) != HAL_OK) {
  19.         // 初始化失败,进入错误处理
  20.         Error_Handler();
  21.     }
  22. }

  23. // 发送数据函数
  24. void UART_SendData(char *data) {
  25.     HAL_UART_Transmit(&huart1, (uint8_t *)data, strlen(data), HAL_MAX_DELAY);
  26. }

  27. // 接收数据函数
  28. void UART_ReceiveData(void) {
  29.     uint8_t rxBuffer[100];
  30.     HAL_UART_Receive(&huart1, rxBuffer, sizeof(rxBuffer), HAL_MAX_DELAY);
  31.     printf("Received data: %s\n", rxBuffer);  // 打印接收到的数据
  32. }

  33. // 主程序
  34. int main(void) {
  35.     HAL_Init();  // 初始化HAL库
  36.     UART_Init();  // 初始化UART
  37.    
  38.     // 无限循环
  39.     while (1) {
  40.         char sendData[] = "Hello, UART!\r\n";
  41.         UART_SendData(sendData);  // 发送数据
  42.         HAL_Delay(1000);  // 每隔1秒发送一次
  43.         
  44.         UART_ReceiveData();  // 接收数据
  45.     }
  46. }

  47. // 错误处理函数
  48. void Error_Handler(void) {
  49.     while (1) {
  50.         // 错误状态处理
  51.     }
  52. }

解析
  • UART初始化:UART_Init()函数中,我们配置了UART的波特率、数据位、停止位等参数,确保通信能够正确进行。
  • 数据发送与接收:通过UART_SendData()发送字符串数据,每隔1秒发送一次;UART_ReceiveData()用于接收外部设备传输过来的数据。
  • 无限循环:在主循环中,不断发送和接收数据,方便我们实时调试和观察串口的通信状态。

总结
通过以上的代码,我们可以快速实现芯圣MCU的UART通信功能。这个基础的例子可以扩展到其他通信协议的应用,例如通过UART连接蓝牙模块、WiFi模块等。如果大家有其他的使用需求,可以在这个基础上进行调整。希望这个简单的示例能帮助你更好地理解芯圣MCU的UART使用!

公羊子丹 发表于 2024-10-4 16:34 | 显示全部楼层
这个代码挺实用的,正好最近在搞UART通信,拿去试试!
周半梅 发表于 2024-10-4 16:34 | 显示全部楼层
芯圣的MCU支持UART挺方便的,这波代码刚好省了不少时间
帛灿灿 发表于 2024-10-4 16:34 | 显示全部楼层
发数据和接数据这部分写得很清楚啊,直接上手就能用!
童雨竹 发表于 2024-10-4 16:35 | 显示全部楼层
用这个例子学UART通信简直太合适了,感谢分享!
Wordsworth 发表于 2024-10-4 16:35 | 显示全部楼层
写得好详细,连错误处理都考虑到了,挺专业的!
Bblythe 发表于 2024-10-4 16:35 | 显示全部楼层
我刚接触芯圣MCU,这个代码真是个入门好教程!
Pulitzer 发表于 2024-10-4 16:35 | 显示全部楼层
UART通信配置就是麻烦,看到你这代码感觉简单多了
Uriah 发表于 2024-10-4 16:36 | 显示全部楼层
哈哈,每隔1秒发一次数据的设计太有趣了,直观!
Clyde011 发表于 2024-10-4 16:36 | 显示全部楼层
之前自己搞串口通信搞了半天,今天终于看懂了!
suncat0504 发表于 2024-10-29 12:14 | 显示全部楼层
收发代码都附上了,谢谢分享。可以直接拷贝下用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

169

主题

6161

帖子

1

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