STM32寄存器&HAL库方式的LED程序

一、STM32F103C8T6实现流水灯

1.创建项目

在这里插入图片描述

2.选择STM32F103C8开发板

在这里插入图片描述

创建项目出现弹窗,不勾选setup项,只勾选core项
在这里插入图片描述

3.在output里选择create hex file

在这里插入图片描述
在这里插入图片描述

4.source group里创建led.c,并写入代码,注意项目结构,使用的引脚是PA5,PB9,PC14
#include "stm32f10x.h"

// APB2使能时钟寄存器
#define RCC_APB2ENR	*((unsigned volatile int*)0x40021018)
// GPIOA配置寄存器
#define GPIOA_CRL	*((unsigned volatile int*)0x40010800)
#define	GPIOA_ODR	*((unsigned volatile int*)0x4001080C)
// GPIOB配置寄存器
#define GPIOB_CRH	*((unsigned volatile int*)0x40010C04)
#define	GPIOB_ODR	*((unsigned volatile int*)0x40010C0C)
// GPIOC配置寄存器
#define GPIOC_CRH	*((unsigned volatile int*)0x40011004)
#define	GPIOC_ODR	*((unsigned volatile int*)0x4001100C)
	
void SystemInit(){}

void delay(u32 time){
	u32 i = 0;
	while(time--){
		i = 2000;
		while(i--){
		}
	}
}

int main(void){
	
	RCC_APB2ENR |= (1<<2);	// GPIOA 时钟使能
	RCC_APB2ENR |= (1<<3);	// GPIOB 时钟使能
	RCC_APB2ENR |= (1<<4);	// GPIOC 时钟使能
	
	GPIOA_CRL &= 0xFF0FFFFF;	// 清空控制 PA5 的端口位
	// F 的位置表示的是对应引脚的位置上的电压,从右向左 CRL 分别为1、2、……、8,CRH 分别为9、10、……、16
	GPIOA_CRL |= 0x00300000;	// PB5 推挽输出(和电压设置有关), 绿灯
	//GPIOA_ODR &= ~(1<<5);		
	GPIOA_ODR |= 1<<5;				// 设置灯初始状态为关闭
	
	GPIOB_CRH &= 0xFFFFFF0F;
	GPIOB_CRH |= 0x00000020;	// 红灯
	//GPIOA_ODR &= ~(1<<9);
	GPIOB_ODR |= 1<<9;
	
	
	GPIOC_CRH &= 0xF0FFFFFF;
	GPIOC_CRH |= 0x02000000;	// 黄灯
	//GPIOC_ODR &= ~(1<<14);
	GPIOC_ODR |= 1<<14;
	
	while(1){
		GPIOA_ODR &= ~(1<<5);	//PB5低电平,因为是置0,所以用按位与
		delay(1000);
		GPIOA_ODR |= 1<<5;		// 设置高电位
		
		// 后面的两个灯的设置方式与上面相同
		
		GPIOB_ODR &= ~(1<<9);
		delay(1000);
		GPIOB_ODR |= 1<<9;
		
		GPIOC_ODR &= ~(1<<14);
		delay(1000);
		GPIOC_ODR |= 1<<14;
	}
	
}
5.添加驱动文件后连接线路

在这里插入图片描述

6.烧录。在build之后会在object文件夹下有对应的hex文件生成

使用驱动进行烧录操作
连接到电脑,打开mcuisp,上传HEX文件到stm32f103c8t6上:
在这里插入图片描述

7.结果

在这里插入图片描述

二、用cubemx完成初始化过程,采用HAL库编程实现

1.安装STM32 HAL库

STM32 HAL固件库是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,为更方便的实现跨STM32产品的最大可移植性。HAL库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。
和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。
并且从16年开始,ST公司就逐渐停止了对标准固件库的更新,转而倾向于HAL固件库和 Low-layer底层库的更新,停止标准库更新,也就表示了以后使用STM32CubeMX配置HAL/LL库是主流配置环境;
(1)打开桌面快捷方式STM32CubeMX 软件,点击右上角“Help”,选择“Manage embedded saftware packages”
(2)如下所示的选择型界面,勾选所需的HAL库
在这里插入图片描述

2.新建项目

(1)回到STMCubeMX的主界面,创建新项目
(2)在part name里选择自己的芯片,点击信息栏中的具体芯片信息选中,点击start project:
在这里插入图片描述
(3)点击system core,进入SYS,在debug下选择serial wire:
在这里插入图片描述
(4)配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里:
在这里插入图片描述
接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上:
在这里插入图片描述
(5)接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA5,PB9,PC14:
在这里插入图片描述
(6)点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM
(7)进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5了

3.运行

在这里插入图片描述

三、总结

1、学习和理解STM32F103系列芯片的地址映射和寄存器映射原理
2、了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值