[综合信息] 使用小华半导体MCU实现UART通信应用

[复制链接]
2166|9
 楼主| Uriah 发表于 2024-10-4 16:08 | 显示全部楼层 |阅读模式
在这篇文章中,我将分享一个使用小华半导体MCU通过UART接口实现基本通信的代码示例。小华MCU性价比高,功能丰富,是物联网和嵌入式应用中常用的芯片之一。下面是一个简单的UART通信程序,通过该程序,我们可以从MCU发送并接收数据。

应用场景
我们通过UART发送和接收数据,可以用于调试、传输指令或数据采集等常见场景。在这份代码中,UART被配置为9600波特率,使用轮询方式发送和接收数据。

硬件连接
  • MCU的TX引脚连接到接收设备的RX引脚。
  • MCU的RX引脚连接到发送设备的TX引脚。
  • 确保所有设备共用同一个地(GND)。

代码实现
  1. #include "xh_mcu.h"
  2. #include "xh_uart.h"

  3. // 定义UART句柄
  4. UART_HandleTypeDef huart;

  5. // 初始化UART
  6. void UART_Init(void) {
  7.     huart.Instance = UART1;
  8.     huart.Init.BaudRate = 9600;
  9.     huart.Init.WordLength = UART_WORDLENGTH_8B;
  10.     huart.Init.StopBits = UART_STOPBITS_1;
  11.     huart.Init.Parity = UART_PARITY_NONE;
  12.     huart.Init.Mode = UART_MODE_TX_RX;
  13.    
  14.     if (HAL_UART_Init(&huart) != HAL_OK) {
  15.         // 初始化错误处理
  16.         Error_Handler();
  17.     }
  18. }

  19. // 发送数据函数
  20. void UART_Send(char *data) {
  21.     HAL_UART_Transmit(&huart, (uint8_t*)data, strlen(data), HAL_MAX_DELAY);
  22. }

  23. // 接收数据函数
  24. void UART_Receive(char *buffer, uint16_t size) {
  25.     HAL_UART_Receive(&huart, (uint8_t*)buffer, size, HAL_MAX_DELAY);
  26. }

  27. int main(void) {
  28.     HAL_Init();        // 初始化HAL库
  29.     UART_Init();       // 初始化UART

  30.     char sendData[] = "Hello from MCU!";
  31.     char recvData[100];

  32.     while (1) {
  33.         // 发送数据
  34.         UART_Send(sendData);
  35.         
  36.         // 接收数据
  37.         UART_Receive(recvData, sizeof(recvData));
  38.         
  39.         // 简单回显接收到的数据
  40.         UART_Send(recvData);
  41.         
  42.         HAL_Delay(1000);  // 每秒发送一次数据
  43.     }
  44. }

  45. // 错误处理函数
  46. void Error_Handler(void) {
  47.     // 错误时进行处理
  48.     while (1) {
  49.     }
  50. }

代码说明:
  • UART_Init() 函数初始化UART配置,包括波特率、数据长度、停止位等。
  • UART_Send() 用于发送数据,这里通过HAL_UART_Transmit来实现。
  • UART_Receive() 用于接收数据,通过HAL_UART_Receive来实现。
  • 在主循环中,定期发送预设的字符串,并将接收到的数据回传,形成简单的回显效果。

总结
通过这段简单的代码,我们实现了使用小华半导体MCU进行UART通信的基础功能。这只是一个入门级的例子,实际项目中可以根据需求进行更复杂的功能扩展,比如中断处理、DMA传输等。希望这对刚开始使用小华MCU的同学有所帮助!

Wordsworth 发表于 2024-10-4 16:08 | 显示全部楼层
这个例子挺实用的,简单明了,适合新手上手,收藏了!
Bblythe 发表于 2024-10-4 16:09 | 显示全部楼层
刚好最近在研究UART通信,这篇文章太及时了,谢谢分享!
Pulitzer 发表于 2024-10-4 16:09 | 显示全部楼层
小华半导体的MCU我还没用过,看了这篇文章有点兴趣了,回去试试看!
Clyde011 发表于 2024-10-4 16:09 | 显示全部楼层
代码很清楚,不过如果用DMA会不会效率更高呢?后续能不能写个带DMA的例子?
公羊子丹 发表于 2024-10-4 16:09 | 显示全部楼层
这个UART代码的框架用起来很方便,我觉得可以直接套用在其他项目上。
周半梅 发表于 2024-10-4 16:10 | 显示全部楼层
小华的MCU价格确实不错,之前就听说了,看来功能也挺强大。
帛灿灿 发表于 2024-10-4 16:10 | 显示全部楼层
每秒发送一次数据的这个功能我觉得在调试的时候特别方便,能实时监控数据传输
童雨竹 发表于 2024-10-4 16:10 | 显示全部楼层
不知道这套代码如果配合FreeRTOS会不会更好用,有没有人试过?
万图 发表于 2024-10-4 16:10 | 显示全部楼层
虽然只是个简单的例子,但对我这种新手来说,已经足够用了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

154

主题

6174

帖子

1

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