[N32G45x] 使用国民技术N32 MCU实现UART通信的完整代码示例

[复制链接]
2604|10
 楼主| 周半梅 发表于 2024-10-4 14:31 | 显示全部楼层 |阅读模式
最近,我在一个项目中使用了国民技术的N32系列MCU,主要任务是实现串口通信来传输数据。我使用的是N32G455系列MCU,并通过UART接口来发送和接收数据。这里我将分享我的完整代码,展示如何配置UART,并通过中断处理接收数据。

硬件平台:
  • N32G455开发板
  • USB转UART模块

开发工具:
  • Keil uVision
  • CubeMX生成初始化代码

下面是完整的代码:
  1. #include "main.h"
  2. #include "usart.h"
  3. #include "gpio.h"
  4. #include "string.h"

  5. // 定义接收数据的变量
  6. uint8_t RxData = 0;

  7. // USART1初始化函数,由CubeMX生成
  8. void MX_USART1_UART_Init(void)
  9. {
  10.     huart1.Instance = USART1;
  11.     huart1.Init.BaudRate = 115200;
  12.     huart1.Init.WordLength = UART_WORDLENGTH_8B;
  13.     huart1.Init.StopBits = UART_STOPBITS_1;
  14.     huart1.Init.Parity = UART_PARITY_NONE;
  15.     huart1.Init.Mode = UART_MODE_TX_RX;
  16.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  17.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  18.     if (HAL_UART_Init(&huart1) != HAL_OK)
  19.     {
  20.         Error_Handler();
  21.     }
  22. }

  23. // 串口发送字符串函数
  24. void UART_SendString(char *str)
  25. {
  26.     HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
  27. }

  28. // UART接收完成中断回调函数
  29. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  30. {
  31.     if (huart->Instance == USART1)
  32.     {
  33.         // 回显收到的字符
  34.         HAL_UART_Transmit(&huart1, &RxData, 1, HAL_MAX_DELAY);
  35.         // 再次启动接收
  36.         HAL_UART_Receive_IT(&huart1, &RxData, 1);
  37.     }
  38. }

  39. int main(void)
  40. {
  41.     // 初始化硬件抽象层
  42.     HAL_Init();

  43.     // 系统时钟配置
  44.     SystemClock_Config();

  45.     // 初始化GPIO
  46.     MX_GPIO_Init();

  47.     // 初始化USART1
  48.     MX_USART1_UART_Init();

  49.     // 发送调试信息
  50.     UART_SendString("Hello from N32 MCU!\r\n");

  51.     // 开始接收第一个字符
  52.     HAL_UART_Receive_IT(&huart1, &RxData, 1);

  53.     // 主循环
  54.     while (1)
  55.     {
  56.         // 在这里执行其他任务
  57.     }
  58. }

  59. // 错误处理函数
  60. void Error_Handler(void)
  61. {
  62.     while(1)
  63.     {
  64.         // 错误处理
  65.     }
  66. }

代码说明:
  • 通过 MX_USART1_UART_Init() 函数初始化UART,设置波特率为115200,8位数据位,1位停止位,无校验。
  • UART_SendString() 函数用于发送字符串到PC或其他设备。
  • HAL_UART_RxCpltCallback() 是中断回调函数,每当接收到数据时,执行相应操作(此处为回显接收的数据)。
  • 在主函数 main() 中,初始化硬件并开始UART接收,主循环中可以执行其他任务。

希望这段代码对你有帮助!如果你在使用国民技术的MCU时遇到任何问题,欢迎在下方留言讨论!

公羊子丹 发表于 2024-10-4 14:32 | 显示全部楼层
哇!代码写得好清晰,学到不少,感谢分享!
帛灿灿 发表于 2024-10-4 14:32 | 显示全部楼层
正好最近也在搞N32的串口通信,这代码太及时了,救了我一命!
童雨竹 发表于 2024-10-4 14:33 | 显示全部楼层
115200波特率,我平时也用这个,稳定又快。感谢分享完整代码!
万图 发表于 2024-10-4 14:33 | 显示全部楼层
回调函数部分写得不错,学到了中断处理的技巧!
Wordsworth 发表于 2024-10-4 14:33 | 显示全部楼层
终于找到个完整的N32串口通信代码,之前一直在调试出问题。谢谢!
Bblythe 发表于 2024-10-4 14:34 | 显示全部楼层
这个USART的初始化配置很实用,收藏了,以后搞项目直接用!
Pulitzer 发表于 2024-10-4 14:34 | 显示全部楼层
HAL库真是好用,这代码几乎不用改就能跑起来。好赞!
Uriah 发表于 2024-10-4 14:34 | 显示全部楼层
串口接收中断这一块讲得很好,回显功能也挺有用的。
Clyde011 发表于 2024-10-4 14:34 | 显示全部楼层
我之前用其他MCU做过类似的功能,换到N32感觉配置更简单了。
申小林一号 发表于 2024-10-30 20:52 | 显示全部楼层
难道还有不完整的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

6117

帖子

1

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