打印
[STM32MP1]

如何在STM32MP1 DK1上编写一个LED闪烁的bare-metal应用程序

[复制链接]
105|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wailian1265k|  楼主 | 2024-4-10 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编写自定义的bare-metal应用程序代码涉及初始化系统、配置外设、处理中断和编写主循环等任务。
下面是一个简单的例子,演示如何何在STM32MP1 DK1上编写一个

LED闪烁的bare-metal应用程序:

#include "stm32mp1xx.h"

#define LED_PIN GPIO_PIN_13
#define LED_PORT GPIOB

void delay(uint32_t milliseconds) {
    uint32_t delay_count = milliseconds * (SystemCoreClock / 1000) / 10;
    while (delay_count--) {
        __NOP();
    }
}

int main(void) {
    // 初始化系统时钟
    SystemInit();
   
    // 使能GPIOB时钟
    RCC->MP_AHB4ENSETR = RCC_MP_AHB4ENSETR_GPIOBEN;
   
    // 配置LED引脚为推挽输出
    LED_PORT->MODER &= ~(GPIO_MODER_MODE13_Msk);
    LED_PORT->MODER |= (GPIO_MODER_MODE13_0);
   
    // 无限循环中闪烁LED
    while (1) {
        // 点亮LED
        LED_PORT->BSRR = LED_PIN;
        delay(1000); // 延时1秒
        
        // 熄灭LED
        LED_PORT->BSRR = LED_PIN << 16;
        delay(1000); // 延时1秒
    }
}
在这个例子中:

SystemInit()用于初始化系统时钟。
通过设置RCC_MP_AHB4ENSETR寄存器来使能GPIOB的时钟。
使用GPIOB的第13引脚(对应LED)作为输出引脚,通过修改MODER寄存器配置为推挽输出模式。
在主循环中,循环执行LED的点亮和熄灭操作,使用BSRR寄存器对引脚进行控制,并使用delay函数实现延时。
您可以根据自己的需求扩展和修改这个例子,添加更多的功能和外设控制代码。

使用特权

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

本版积分规则

48

主题

315

帖子

0

粉丝