IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 使用HAL库&寄存器完成LED流水灯程序 -> 正文阅读

[嵌入式]使用HAL库&寄存器完成LED流水灯程序

一、安装STM32CubeMX

1.下载STM32CubeMX安装包

(1)可前往官网http://www.st.com/stm32cube下载安装包
(官网下载需要先注册,若已有账户可直接登陆)
登陆之后,依次点击开发工具硬件→软件开发工具→STM32软件开发套件→STM32配置程序和代码生成器→STM32CubeMX,然后点击获取软件

(2)选择型号为STM32CubeMX-Win的产品并在其后面点击选择版本,选择自己需要的版本(不建议使用最新版本),我下载的是6.5.0版本,并根据自己的意愿选择下载路径。

2.安装程序

(1)以管理员身份运行下载好的程序,在弹出来的页面点击Next

(2)先点击"I accept the terms of this license agreement",再点击Next

(3)勾选“I have read and understood the ST Privacy Policy and ST Terms of Use”即可,然后点击Next

(4)自定义安装位置(安装位置中不要出现中文),然后点击Next

(5)不用设置,直接点击Next之后开始安装

(6)等待安装,安装完成之后点击Next,然后在弹出来的页面点击Done


这样便说明STM32CubeMX成功安装!

3.安装HAL库

(1)打开安装好的STM32CubeMX,点击HELP→Manage embedded software packages

(2)在弹出来的选择型号的界面勾选上你要安装的HAL库, 点击“Install” ,然后等待安装,安装成功后关闭当前页面


这样HAL库就安装成功了!

二、使用HAL库点亮流水灯

1.创建项目

(1)打开STM32CubeMX主界面,点击“ACCESS TO MCU SELECTOR”,创建新项目

(2)在“Commerical Part Number”里面选择自己需要的芯片,点击信息栏中的具体芯片信息选中,再点击“Start Project”

(3)点击System Core→SYS,在Debug下选择“Serial Wire”

(4)点击“Clock Configuration”,勾选PLLCLK
(5)点击“Pinout & Configuration”,再点击RCC,将HSE那里设为Crystal/Ceramic Resonator

(6)点击GPIO,然后点击需要的引脚设置输出寄存器,即设置为GPIO_Output,我选择的引脚有三个,即A4,B9,C15,并把它们的输出等级设置为High


(7)点击Project Manager 配置好自己的路径名和项目名(最好全用英文,不然可能会出现问题),然后将IDE设置为MDK-ARM
在这里插入图片描述
(8)点击Code Generate界面,选择生成初始化文件.c/.h,之后再点击GENERATE CODE即可成功创建项目

2.编写程序

(1)在点击GENERATE CODE之后弹出来的界面点击Open Project即可跳转到Keil5进行程序编写


(2)打开main.c文件,滑到主函数那一部分

(3)将主函数里面的内容替换为如下代码:

SystemClock_Config();//系统时钟初始化
  MX_GPIO_Init();//gpio初始化
  while (1)
  {		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(1000);//延时1s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
		HAL_Delay(1000);//延时1s
	}

(4)编译程序并创建hex文件

3.连接电路

(1)根据设计的程序连接电路

USB转TTLSTM32F103C8T6
GNDGND
3v33v3
TXDA10
RXDA9

STM32F103C8T6的引脚3.3要接面包板上灯的正极所在的地方
(2)总电路

灯(负极)引脚
红灯B9
绿灯C15
黄灯A4

4.烧录运行

注:串口烧录要断电之后置BOOT0为0,BOOT1为1
(1)打开mcuisp,选择串口为COM5,并选择生成的LED.hex文件

(2)点击读器件信息,若显示一切正常则进行下一步

(3)点击开始编程,若显示一切正常则说明烧录成功

5.运行结果

流水灯点亮(HAL库)


可以看到LED呈周期闪烁,说明流水灯点亮成功。

6.观察输出波形

(1)先点击魔术棒,再点击Target,设置正确的晶振大小,我设置的是8MHz的外部晶振。
注:这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。)

(2)点击Debug,按如下步骤进行设置:

(3)点击Start/Stop Debug Session进行调试

(4)选择逻辑分析仪

(5)点击Setup Logic Analyzer,然后添加自己需要观察引脚并将Display Type设置为Bit,再根据自己需要可为每个引脚的波形设置颜色用以区分,设置完成后点击Close

(6)点击In/Out将Grid的大小调为1s,勾选Signal info和Cursor能设置显示起始线并能看到相关信息

(7)点击Run即可开始运行

(8)运行一段时间后点击Stop停止运行并观察LED闪烁周期

由波形图可知,引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为0.982511s,约为1s。

三、用寄存器方式实现点亮流水灯

1.创建项目

(1)打开Keil5,点击Project,选择第一项新建工程,并设置好工程名和路径,不要有中文

(2)设置工程的目标环境,即选择芯片STM32F103C8,然后点击OK

(3)点击OK之后弹出来的页面不用选择什么,直接叉掉

(4)点击“Add New Item to Group ‘Source Group1’”,添加一个.c文件,并设置好名称,我这里设置的是main,然后选择路径,设置完成后点击Add


(5)在电脑中找到starup_stm32f10x_md.s文件,并将其复制到新建的项目下


(6)右击Source Group1,选择“Add Existing Files to Group ‘Source Group1’”,将文件类型选择为All Files,选择刚刚复制添加的启动文件,然后点击Add,最后点击Close


(7)点击魔术棒→Output→勾选Create HEX File→OK

2.编写程序

(1)在main.c中写入如下代码:


#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800

#define RCC_APB2ENR (*(unsigned int *)0x40021018)

#define GPIOB_CRH (*(unsigned int *)0x40010C04)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)

#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)
	


void SystemInit(void);
void Delay_ms(volatile  unsigned  int);
void A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);
void Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<800;i++);
}

void A_LED_LIGHT(){
	GPIOA_ODR=0x0<<4;		//PA4低电平
	GPIOB_ODR=0x1<<9;		//PB9高电平
	GPIOC_ODR=0x1<<15;		//PC15高电平
}
void B_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4高电平
	GPIOB_ODR=0x0<<9;		//PB9低电平
	GPIOC_ODR=0x1<<15;		//PC15高电平
}
void C_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4高电平
	GPIOB_ODR=0x1<<9;		//PB9高电平
	GPIOC_ODR=0x0<<15;		//PC15低电平	
}

int main(){
	int j=100;
	// 开启时钟
	RCC_APB2ENR |= (1<<3); // 开启 GPIOB 时钟
	RCC_APB2ENR |= (1<<4); // 开启 GPIOC 时钟
	RCC_APB2ENR |= (1<<2); // 开启 GPIOA 时钟
	
	
	// 设置 GPIO 为推挽输出
	GPIOB_CRH&= 0xffffff0f;	//设置位 清零		
	GPIOB_CRH|=0x00000020;  //PB9推挽输出

	GPIOC_CRH &= 0x0fffffff; //设置位 清零		
	GPIOC_CRH|=0x30000000;  //PC15推挽输出


	GPIOA_CRL &= 0xfff0ffff; //设置位 清零		
	GPIOA_CRL|=0x00010000; //PA4推挽输出

	// 3个LED初始化为不亮(即高点位)
	GPIOB_ODR |= (1<<9); 
	GPIOC_ODR |= (1<<15); 
	GPIOA_ODR |= (1<<4);  
	
	while(j){
		
		B_LED_LIGHT();
		Delay_ms(1000000);

		C_LED_LIGHT();
		Delay_ms(1000000);

		A_LED_LIGHT();
		Delay_ms(1000000);
	}
	
}


void SystemInit(){
	
}

(2)编译程序并创建hex文件

3.连接电路

电路连接与使用HAL库点亮流水灯完全一样

4.烧录运行

串口烧录跟使用HAL库一样要断电之后置BOOT0为0,BOOT1为1
(1)打开mcuisp,选择串口为COM5,并选择生成的led.hex文件
(2)点击读器件信息,若显示一切正常则进行下一步

(3)点击开始编程,若显示一切正常则说明烧录成功

5.运行结果

流水灯(寄存器)


可以看到LED呈周期闪烁,说明流水灯点亮成功。

6.观察输出波形

(1)相关设置与使用HAL方式完全一样
(2)点击Run开始运行,运行一段时间后点击Stop停止运行并观察LED闪烁周期

由波形图可知,引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1.122451s,约为1s。

四、总结

安装软件及实验过程中需要设置的参数比较多,需要足够的耐心和细心,在用两种不同方式点亮流水灯的过程中可以发现STM32CubeMX中使用HAL库点亮流水灯的方式比使用寄存器点亮流水灯的方式要简单一些。

五、参考链接

http://t.csdn.cn/TlWhc

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:52:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:44:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码