欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

STM32F4 阿波罗寄存器点亮LED灯

程序员文章站 2022-05-15 14:13:18
学习步骤: 学习步骤: 使用寄存器点亮LED灯,需要进行如下的步骤,LED灯属于外设部分,首先需要开启外设的时钟使能,然后LED灯是PB1口,(芯片是正点原子的阿波罗),接着定义GPIOB口的输出模式,为上拉、推挽、100M,最后定义B口的1引脚为低电平就可以实现点亮了。 这一部分内容耗时有点长,最 ......
  • 学习步骤:

 

使用寄存器点亮led灯,需要进行如下的步骤,led灯属于外设部分,首先需要开启外设的时钟使能,然后led灯是pb1口,(芯片是正点原子的阿波罗),接着定义gpiob口的输出模式,为上拉、推挽、100m,最后定义b口的1引脚为低电平就可以实现点亮了。

 

这一部分内容耗时有点长,最后发现关键原因在于调试的时候未按复位键,这个原因我也是很无语啊,怪不得在之前下载完程序,第二天早上去开电源的时候,一个灯亮了,原来程序写的是对的呀~~~

 

  • 错误与总结:

错误就是按键问题,下载完程序我一看灯没亮,于是就继续修改程序,修改了好几个版本了,可能之前的也是对的吧。此外,过程之中也对代码做了很多修改与检查,由于寄存器的地址需要自己查找,所有有时候会写错,不过我应该是看了好多遍,现在印象很深刻了呢。首先确保时钟使能开启的是ahb1,然后对gpiob口进行定义,初始地址与偏移地址一定要加对哦。

中间有很多c语言代码的位操作,现在补充一下:

置位 |=     清零 =&= ~

a>>b 指的是a这个数向右移b位  a<<b 指的是a这个数向左移b位

需要修改下魔术棒之中target的晶振 mini板为8 ,阿波罗为12

  • 代码:

#include "stm32f429xx.h"

int main(void)
{
//使能时钟ahb1
    *(unsigned int *)0x40023830 |= (1<<1);
//控制io口输出
    *(unsigned int *)0x40020400 &= 0x00000000;
    *(unsigned int *)0x40020400 |= (1<<2);
    
    *(unsigned int *)0x40020404 &= 0x00000000;
    
    *(unsigned int *)0x40020408 &= 0x00000000;
    *(unsigned int *)0x40020408 |= (1<<3);
    
    *(unsigned int *)0x4002040c &= 0x00000000;
    *(unsigned int *)0x4002040c |= (1<<2);


//odr寄存器
    *(unsigned int *)0x40020414 &=~(1<<1);
    
}


void systeminit(void) //骗过编译器不会报错
{


}