打印
[其他]

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

[复制链接]
661|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

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

#define LED_PIN GPIO_PIN_0
#define LED_PORT GPIOB

void UART_Init(void) {
    UART_InitTypeDef UART_InitStructure;
    UART_InitStructure.BaudRate = 9600;
    UART_InitStructure.WordLength = UART_WORDLENGTH_8B;
    UART_InitStructure.StopBits = UART_STOPBITS_1;
    UART_InitStructure.Parity = UART_PARITY_NONE;
    UART_InitStructure.Mode = UART_MODE_RX | UART_MODE_TX;
    HAL_UART_Init(UART1, &UART_InitStructure);
}

void GPIO_Init(void) {
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.Pin = LED_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
}

void LED_Control(uint8_t state) {
    if (state) {
        HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);  // 打开LED
    } else {
        HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);  // 关闭LED
    }
}

int main(void) {
    HAL_Init();
    UART_Init();
    GPIO_Init();

    uint8_t buffer[10];
    while (1) {
        if (HAL_UART_Receive(UART1, buffer, sizeof(buffer), 1000) == HAL_OK) {
            if (strncmp((char *)buffer, "on", 2) == 0) {
                LED_Control(1);  // 开启LED
            } else if (strncmp((char *)buffer, "off", 3) == 0) {
                LED_Control(0);  // 关闭LED
            }
        }
    }
}

项目说明:
  • 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 | 只看该作者
代码看着很清晰,已经跑起来了,灯一闪一闪的,挺有成就感!

使用特权

评论回复
5
童雨竹| | 2024-10-5 14:14 | 只看该作者
串口这块我之前一直卡住了,终于弄明白了,感谢!

使用特权

评论回复
6
万图| | 2024-10-5 14:14 | 只看该作者
MM32的开发环境有点不太熟悉,你用的是啥开发工具?

使用特权

评论回复
7
Wordsworth| | 2024-10-5 14:15 | 只看该作者
串口通信好用吗?会不会有丢数据的情况?

使用特权

评论回复
8
Bblythe| | 2024-10-5 14:15 | 只看该作者
我看代码很干净,适合新手模仿,点赞!

使用特权

评论回复
9
Uriah| | 2024-10-5 14:16 | 只看该作者
我也想把串口改成蓝牙模块,不知道能不能行得通?

使用特权

评论回复
10
Clyde011| | 2024-10-5 14:16 | 只看该作者
跟我之前用的STM32挺像的,估计用惯STM32的上手很快。

使用特权

评论回复
11
suncat0504| | 2024-10-8 22:19 | 只看该作者
点灯和串口,是学习一个单片机的入门。其中串口最重要,可以作为调试程序的日志输出。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

3657

帖子

0

粉丝