[其他] 基于灵动MM32 MCU的LED闪烁控制与串口通信应用

[复制链接]
1522|10
 楼主| Pulitzer 发表于 2024-10-5 14:13 | 显示全部楼层 |阅读模式

最近在使用灵动MM32 MCU开发一个小项目,主要是通过串口发送指令来控制LED的开关。这个项目结合了基础的GPIO控制和UART串口通信功能,非常适合初学者练习和深入理解MCU的工作原理。

硬件准备:
  • 灵动MM32 MCU开发板
  • LED灯(连接到GPIO引脚)
  • USB转串口模块(用于与PC通信)

主要功能:
  • 通过串口发送指令来控制LED的开关状态
  • 串口波特率为9600,数据位为8位,无校验,1位停止位
  • 输入“on”开启LED,输入“off”关闭LED

代码实现:
  1. #include "mm32_device.h"
  2. #include "hal_gpio.h"
  3. #include "hal_uart.h"

  4. #define LED_PIN GPIO_PIN_0
  5. #define LED_PORT GPIOB

  6. void UART_Init(void) {
  7.     UART_InitTypeDef UART_InitStructure;
  8.     UART_InitStructure.BaudRate = 9600;
  9.     UART_InitStructure.WordLength = UART_WORDLENGTH_8B;
  10.     UART_InitStructure.StopBits = UART_STOPBITS_1;
  11.     UART_InitStructure.Parity = UART_PARITY_NONE;
  12.     UART_InitStructure.Mode = UART_MODE_RX | UART_MODE_TX;
  13.     HAL_UART_Init(UART1, &UART_InitStructure);
  14. }

  15. void GPIO_Init(void) {
  16.     GPIO_InitTypeDef GPIO_InitStruct;
  17.     GPIO_InitStruct.Pin = LED_PIN;
  18.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  19.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  20.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  21.     HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
  22. }

  23. void LED_Control(uint8_t state) {
  24.     if (state) {
  25.         HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);  // 打开LED
  26.     } else {
  27.         HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);  // 关闭LED
  28.     }
  29. }

  30. int main(void) {
  31.     HAL_Init();
  32.     UART_Init();
  33.     GPIO_Init();

  34.     uint8_t buffer[10];
  35.     while (1) {
  36.         if (HAL_UART_Receive(UART1, buffer, sizeof(buffer), 1000) == HAL_OK) {
  37.             if (strncmp((char *)buffer, "on", 2) == 0) {
  38.                 LED_Control(1);  // 开启LED
  39.             } else if (strncmp((char *)buffer, "off", 3) == 0) {
  40.                 LED_Control(0);  // 关闭LED
  41.             }
  42.         }
  43.     }
  44. }

项目说明:
  • GPIO初始化:将GPIO配置为推挽输出,用于控制LED灯的开关。
  • 串口初始化:配置波特率为9600,8位数据位,无校验和1位停止位。通过UART1与PC通信。
  • 串口接收:通过串口接收“on”或“off”指令来控制LED灯的状态。

小结:
这个项目展示了如何通过灵动MM32 MCU实现基本的串口通信和GPIO控制。接下来可以尝试扩展更多的功能,比如增加PWM调节LED亮度,或者增加多个LED的控制。

希望对大家有所帮助!

公羊子丹 发表于 2024-10-5 14:13 | 显示全部楼层
这个例子真不错,刚好我也在玩MM32,准备试试串口控制!
周半梅 发表于 2024-10-5 14:13 | 显示全部楼层
简单明了,最适合入门练手了,谢谢分享!
帛灿灿 发表于 2024-10-5 14:14 | 显示全部楼层
代码看着很清晰,已经跑起来了,灯一闪一闪的,挺有成就感!
童雨竹 发表于 2024-10-5 14:14 | 显示全部楼层
串口这块我之前一直卡住了,终于弄明白了,感谢!
万图 发表于 2024-10-5 14:14 | 显示全部楼层
MM32的开发环境有点不太熟悉,你用的是啥开发工具?
Wordsworth 发表于 2024-10-5 14:15 | 显示全部楼层
串口通信好用吗?会不会有丢数据的情况?
Bblythe 发表于 2024-10-5 14:15 | 显示全部楼层
我看代码很干净,适合新手模仿,点赞!
Uriah 发表于 2024-10-5 14:16 | 显示全部楼层
我也想把串口改成蓝牙模块,不知道能不能行得通?
Clyde011 发表于 2024-10-5 14:16 | 显示全部楼层
跟我之前用的STM32挺像的,估计用惯STM32的上手很快。
suncat0504 发表于 2024-10-8 22:19 | 显示全部楼层
点灯和串口,是学习一个单片机的入门。其中串口最重要,可以作为调试程序的日志输出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

160

主题

6066

帖子

0

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