学习STM32第二天---寄存器点灯

今日学习内容:

1、寄存器编程,查询参考手册以及原理图;

2、使用寄存器点亮LED灯;

3、使用魔术棒配置编译器。

学习笔记:

1、了解新建Project的过程,需要自己建一个Output的文件,包含有:

a、main.c/stm32f4xx.h/startup_stm32f429_439xx.s(这个是启动文件);

关于启动文件了解到如下内容即可:
1、我们需要在外部定义一个 SystemInit函数设置 STM32 的时钟;
2、STM32 上电后,会执行 SystemInit 函数;

当我们不配置系统时时(用一个空的SystemInit 函数骗过程序), STM32 会把 HSI 当作系统时钟, HSI=8M,由芯片内部的振荡器提供。
3、最后执行我们 C 语言中的 main 函数。

b、同时需要更改编译器为AC5;(有可能是因为原来的库还是这个编译器写的)

c、随后进行一些配置选项卡的过程(比如生成的.hex和.axf文件是烧录的)。

2、寄存器映射?

点亮LED灯需要用到三个寄存器,通过原理手册可以查出:

a、GPIOH_ORD寄存器,用于输出控制引脚的电平;

在输出模式时,对端口位设置/清除寄存器 BSRR 寄存器、端口位清除寄存器 BRR 和ODR 寄存器写入参数即可控制引脚的电平状态,其中操作 BSRR 和 BRR 最终影响的都是ODR 寄存器,然后再通过ODR 寄存器的输出来控制 GPIO。

b、GPIOH_MODER寄存器,由于GPIO复位模式默认是输入的,现在要输出改为01模式;

c、RCC_AHB1ENR需要打开时钟;

由于 STM32 的 外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。STM32 的所有外设的时钟由一个专门的外设来管理,叫 RCC(reset and clockcontrol)

本人在写映射的时候犯的错误,对于地址没有搞清楚,特此写出来以后引以为戒(学会用debug模式查看外设寄存器,来寻找问题是怎么出现的):

/*
stm32f4xx.h 文件
头文件用于存放寄存器映射代码
在2.3存储器映射找 
*/
/*错误代码
#define GPIOH 			*(unsigned int *)(0x40021C00)
#define RCC				*(unsigned int *)(0x40023800)
*/
#define GPIOH 			(0x40021C00)
#define RCC				(0x40023800)

/*GPIO复位模式默认是输入的,现在要输出改为01模式*/
#define GPIOH_MODER 	*(unsigned int *)(GPIOH+0x00)
	
#define GPIOH_ODR   	*(unsigned int *)(GPIOH+0x14)

#define RCC_AHB1ENR		*(unsigned int *)(RCC+0x30)
/*用于学习如何新建工程文件*/

#include "stm32f4xx.h"

void LED_delay( unsigned int time)
{
  //粗延时 看晶振速度
  for(;time !=0;time--);
}

int main(void)
{
	/*打开时钟*/
	RCC_AHB1ENR |=(1<<7);
	
	/*第20/21位置01*/
	GPIOH_MODER |=(1<<(2*10));
	
	/*第10位置0*/
	GPIOH_ODR &=~(1<<10); 
	
  while(1)
	{
		GPIOH_ODR &=~(1<<10);
		LED_delay(0xEFFFF);
		GPIOH_ODR |=(1<<10);
		LED_delay(0xEFFFF);
	}
}

void SystemInit(void)
{
}

遇到的问题:

1、debug调试的时候,Peripheral无法查看外设寄存器?

跟教程学习的时候发现无法查看外设寄存器,个人觉得是新版本的问题,参考下面的博客进行解决。

keil无法查看外设寄存器(生成SFR文件)_keil arm5.39 调试时 不能显示寄存器-CSDN博客

Keil MDK 5.14Debug仿真时System Viewer菜单显示空白和Peripherals菜单无外设寄存器的解决办法_debug adapter中的unit空白-CSDN博客

参考:

[STM32学习笔记(二)] 使用寄存器点亮LED小灯_stm32f10x,h怎么打开-CSDN博客

stm32f103c8t6中delay(0xfffff)是多少秒 - CSDN文库

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值