童雨竹 发表于 2024-10-2 15:38

基于新定义MCU的LED闪烁应用:从零开始编写简单代码

最近,我拿到了新定义(NewDefine)MCU的开发板,决定写一个简单的LED闪烁程序来测试一下这个MCU的基本功能。新定义MCU在性能和价格方面都有很好的平衡,适合各种小型嵌入式项目。我这次用的是它们的低功耗型号,下面分享下我的编程过程。

准备工作
[*]开发环境:我使用的是官方推荐的NewDefine IDE,这个IDE对新定义MCU的支持非常友好,内置了很多代码模板。
[*]硬件:一块NewDefine MCU开发板和一个LED(连接在GPIO引脚上)。
[*]编译器:使用的是NewDefine提供的GCC编译器,编译效率还不错。

代码实现这次的目标是通过GPIO控制LED实现简单的闪烁功能,下面是核心代码:

#include "newdefine.h"

// 定义LED连接的GPIO引脚
#define LED_PIN GPIO_PIN_5
#define LED_PORT GPIOA

void delay_ms(uint32_t ms) {
    // 简单的延时函数
    volatile uint32_t count = ms * 1000;
    while(count--) {
      __NOP();
    }
}

int main(void) {
    // 初始化MCU系统
    SystemInit();
   
    // 启用GPIOA的时钟
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

    // 配置GPIOA PIN 5为输出模式
    LED_PORT->MODER |= (1 << (LED_PIN * 2));

    while (1) {
      // 点亮LED
      LED_PORT->ODR |= LED_PIN;
      delay_ms(500); // 延时500毫秒

      // 熄灭LED
      LED_PORT->ODR &= ~LED_PIN;
      delay_ms(500); // 延时500毫秒
    }
}

代码讲解
[*]初始化系统:首先通过SystemInit()函数初始化MCU的时钟系统。
[*]GPIO配置:通过设置GPIOA的时钟使能和引脚模式,把PA5设置为输出模式,这里我们连接了LED。
[*]LED控制:使用简单的位操作对ODR寄存器进行设置,通过OR操作点亮LED,通过AND操作熄灭LED。
[*]延时函数:为了控制LED闪烁的速度,我写了一个简易的延时函数,通过循环实现。

应用场景这个例子虽然简单,但在实际应用中,可以用于调试、状态指示灯等功能。随着项目复杂度的增加,LED控制可以结合定时器和中断等功能,实现更复杂的控制逻辑。

总结这次的NewDefine MCU体验非常不错,开发环境和硬件资源都比较丰富。简单的GPIO控制非常直观,适合刚入门的开发者。如果大家也想试试新定义的MCU,可以从这个简单的项目开始,逐步探索更多高级功能。

公羊子丹 发表于 2024-10-2 15:38

哇,这个教程很清晰,正好我也刚拿到新定义的开发板,回去试试!

帛灿灿 发表于 2024-10-2 15:39

感谢分享!这个延时函数好简单,我还在纠结该用什么方式写延时呢。

周半梅 发表于 2024-10-2 15:39

新定义的MCU性能怎么样?一直在犹豫要不要入手一块开发板。

万图 发表于 2024-10-2 15:39

代码看起来挺容易理解的,我这种新手感觉也能搞定哈哈!

Wordsworth 发表于 2024-10-2 15:40

LED闪烁是入门必经之路啊,每次写完都觉得好有成就感。

Pulitzer 发表于 2024-10-2 15:40

没想到新定义的MCU还挺好用的,有没有更复杂的例子可以参考?

Bblythe 发表于 2024-10-2 15:41

延时函数这么写靠谱吗?不会卡住系统吗?

Uriah 发表于 2024-10-2 15:41

谢谢分享,刚好要用新定义的MCU写个小项目,代码直接拿来用了。

Clyde011 发表于 2024-10-2 15:42

这个开发板的GPIO控制好像挺方便的,准备入手玩一下。

szt1993 发表于 2024-11-19 23:58

LED等入门必备
页: [1]
查看完整版本: 基于新定义MCU的LED闪烁应用:从零开始编写简单代码