当前位置: 移动技术网 > IT编程>开发语言>C/C++ > STM32F4 阿波罗寄存器点亮LED灯

STM32F4 阿波罗寄存器点亮LED灯

2019年08月23日  | 移动技术网IT编程  | 我要评论

windows安全警报,春晚内幕,8090理财

  • 学习步骤:

 

使用寄存器点亮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) //骗过编译器不会报错
{


}

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网