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

[复制链接]
 楼主| wailian1265k 发表于 2024-4-10 09:22 | 显示全部楼层 |阅读模式
编写自定义的bare-metal应用程序代码涉及初始化系统、配置外设、处理中断和编写主循环等任务。
下面是一个简单的例子,演示如何何在STM32MP1 DK1上编写一个

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

  1. #include "stm32mp1xx.h"

  2. #define LED_PIN GPIO_PIN_13
  3. #define LED_PORT GPIOB

  4. void delay(uint32_t milliseconds) {
  5.     uint32_t delay_count = milliseconds * (SystemCoreClock / 1000) / 10;
  6.     while (delay_count--) {
  7.         __NOP();
  8.     }
  9. }

  10. int main(void) {
  11.     // 初始化系统时钟
  12.     SystemInit();
  13.    
  14.     // 使能GPIOB时钟
  15.     RCC->MP_AHB4ENSETR = RCC_MP_AHB4ENSETR_GPIOBEN;
  16.    
  17.     // 配置LED引脚为推挽输出
  18.     LED_PORT->MODER &= ~(GPIO_MODER_MODE13_Msk);
  19.     LED_PORT->MODER |= (GPIO_MODER_MODE13_0);
  20.    
  21.     // 无限循环中闪烁LED
  22.     while (1) {
  23.         // 点亮LED
  24.         LED_PORT->BSRR = LED_PIN;
  25.         delay(1000); // 延时1秒
  26.         
  27.         // 熄灭LED
  28.         LED_PORT->BSRR = LED_PIN << 16;
  29.         delay(1000); // 延时1秒
  30.     }
  31. }
在这个例子中:

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

413

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部