STM32F429 点亮LED

STM32 FT429 使用寄存器点亮LED

最近开始学习野火F429挑战者教程

电路分析

image-20220924014501479

LED电路分析:

  1. 左端跳帽置1
  2. 右端PH10-12为IO端 分别对应红绿蓝
  3. 其中PH10中 PH对应GPIOH 10对应第十位

则当PH10/11/12置0时打通电路灯亮,置1时则两边都为高电平,灯则不亮

地址分析

找到GPIOH的基地址为0X40021C00

image-20220924024110401

找到对应寄存器的偏移地址为0x14

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oxTmp4fa-1663962923685)(https://picture-1309470925.cos.ap-chengdu.myqcloud.com/pic/image-20220924014444410.png)]

编写代码

此时的源代码

stm32f4xx.h
    
/*宏定义存放寄存器地址映射的代码*/
#define GPIOH_ODR *(unsigned int*)(0x40021C00+0x14)//0x40021C00为GPIOH的基地址,0X14为偏移地址

main.c
#include"stm32f4xx.h"
int main(void){
	GPIOH_ODR &= ~(1>>10);
	while(1);
}
//HSI = 16M
//设置为空骗系统不报错
void SystemInit(void){
}

编译结果
Build started: Project: led_light
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
compiling main.c...
linking...
Program Size: Code=348 RO-data=444 RW-data=0 ZI-data=2144  
".\Objects\led_light.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01

但是最终烧录进单片机时却没有亮红灯,为什么呢?

因为在stm32里面默认IO只有输入,若想要输出则需要更改其他寄存器

image-20220924025440483

若想要控制ph10 则需要修改对应该寄存器上21-20位的值

修改后的代码
#include"stm32f4xx.h"
/*宏定义存放寄存器地址映射的代码*/
//0x40021C00为GPIOH的基地址,0X14为偏移地址
#define GPIOH_ODR   *(unsigned int*)(0x40021C00+0x14)
#define GPIOH_MODER *(unsigned int*)(0x40021C00+0x00)

int main(void){
	//配置PH10为输出
	GPIOH_MODER|=(1<<(2*10));
	//配置ph10为低电平
	GPIOH_ODR &= ~(1<<10);
	while(1);
}
//HSI = 16M
//设置为空骗系统不报错
void SystemInit(void){
}


编译烧录后还是不行,为什么呢?

因为stm32属于是较为先进的单片机,默认外设时钟都是关闭的,若需要开启则需要手动开启

image-20220924031639862

image-20220924031845249

找到管控GPIOH寄存器的时钟寄存器 基地址为 0x40023800 偏移地址为0x30 且在该寄存器上的第7位

/*宏定义存放寄存器地址映射的代码*/
//0x40021C00为GPIOH的基地址,0X14为偏移地址
#define GPIOH_ODR   *(unsigned int*)(0x40021C00+0x14)
#define GPIOH_MODER *(unsigned int*)(0x40021C00+0x00)
#define RCC_AHB1ENR *(unsigned int*)(0x40023800+0x30)

#include"stm32f4xx.h"
int main(void){
	//打开GPIOH的时钟
	RCC_AHB1ENR |= (1<<7);
	//配置PH10为输出
	GPIOH_MODER|=(1<<(2*10));
	//配置ph10为低电平
	GPIOH_ODR &= ~(1<<10);
	while(1);
}
//HSI = 16M
//设置为空骗系统不报错
void SystemInit(void){
}

烧录后发现还是不行…

原因…

image-20220924032644565

要勾上这个.具体原因还要等以后学习

成功点亮

image-20220924032735371

若需要实现闪烁的效果

#include"stm32f4xx.h"
void Led_delay(unsigned int count){
	for(;count>0;count--);
}
int main(void){
	//打开GPIOH的时钟
	RCC_AHB1ENR |= (1<<7);
	//配置PH10为输出
	GPIOH_MODER|=(1<<(2*10));
	while(1){
	//配置ph10为低电平 亮
	GPIOH_ODR &= ~(1<<10);
	Led_delay(0xEFFFF);//数字太小可能因为过快而无法发觉
	GPIOH_ODR |= 1<<10;
	Led_delay(0xEFFFF);
	}
}

//HSI = 16M
//设置为空骗系统不报错
void SystemInit(void){
}


ODR &= ~(1<<10);
	Led_delay(0xEFFFF);//数字太小可能因为过快而无法发觉
	GPIOH_ODR |= 1<<10;
	Led_delay(0xEFFFF);
	}
}

//HSI = 16M
//设置为空骗系统不报错
void SystemInit(void){
}

万事开头难,第一天配环境+学习了这些内容.加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值