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