最近在使用灵动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的控制。
希望对大家有所帮助!
|