STM32F4 阿波罗寄存器点亮LED灯
程序员文章站
2022-08-03 20:09:50
学习步骤: 学习步骤: 使用寄存器点亮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) //骗过编译器不会报错 { }