stm32cubeMX使用HAL库点亮LED流水灯
系列文章目录
文章目录
- 系列文章目录
- 一、实验工具
- 二、STM32CubeMX生成代码使用HAL库点亮流水灯
- 1.安装STM32CubeMX
- 2.安装HAL库
- 3.新建项目
- 4.keil仿真调试
- 三、用寄存器方式实现点亮流水灯
- 1.项目创建
- 2.编写代码
- 3.编译程序
- 4.观察GPIO端口的输出波形
- 总结
一、实验工具
STM32CubeMX
KEIL5:安装教程
mcuisp: mcuisp百度网盘链接:https://pan.baidu.com/s/1WyvtnCJad_BqXbwTzhcofw
提取码:h2xc
STM32F103C8T6的最小核心板
二、STM32CubeMX生成代码使用HAL库点亮流水灯
1.安装STM32CubeMX
官网下载(官网下载需要绑定邮箱或者注册)
有需要修改安装位置,其他可以一路next。
2.安装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)打开安装好的STMCubeMX
(2)点击HELP->Manage embedded software packages :
(3)会跳出来一个选择型号界面 勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功。 如下图:
3.新建项目
(1)回到STMCubeMX的主界面,创建新项目:
(2)在part name里选择自己的芯片,点击信息栏中的具体芯片信息选中,点击start project:
(3)点击system core,进入SYS,在debug下选择serial wire:
(4)配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里:
接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上:
(5)将hse那里设为Crystal/Ceramic Resonator:
(6)接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA4,PB9,PC15:
(7)点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM:
(8)进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5了:
4.keil仿真调试
(1)打开.uvprojx文件(或者在上一步选择open project)
打开main.c文件,滑倒主函数那一部分:
(2)将下面代码放入主函数中(替代里面的内容)
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);//延时1sHAL_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);//延时1sHAL_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}
(3)电路连接
根据设计的程序连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9
总电路:
红——B9
绿——C15
黄——A4
(4)烧录运行
串口烧录要断电之后把boot0置0才能正常运行:
(5)观察GPIO端口的输出波形
(1)Target界面中,选择跟正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。
在这里插入图片描述
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1s左右。
三、用寄存器方式实现点亮流水灯
1.项目创建
具体见ARM汇编程序调试:基于MDK创建纯汇编语言的STM32工程
不同之处:
1)芯片选择STM32F103C8
2)当出现下图时,直接叉掉,不做选择
添加一个main.c文件:
将野火资料中的下图中的文件复制到新建的项目下:
右击文件夹,选择Add Existing Files to Group Source Group 1(或双击文件夹),选择All FIles,选择刚刚添加的启动文件,Add,Add之后Close:
打开魔术棒,如下图所示勾选Create HEX File:
2.编写代码
在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(){}
3.编译程序
编译:
连接到电脑,打开mcuisp,上传HEX文件到stm32f103c8t6上:
成功点灯
4.观察GPIO端口的输出波形
相关设置: 二.4.(4)
观察波形:
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1.12s左右。
总结
通过本次实验,再加上与上次实验的对比,上一个实验自己要写的相关语句比较多,但是可以加深我们对实验的每一步的理解,本次实验与上次实验相比,大大提高了我们的开发速度和效率,不过对相应组件的掌握要求比较高,实现点灯也比较容易。
https://blog.csdn.net/weixin_46129506/article/details/120780184
stm32cubeMX使用HAL库点亮LED流水灯相关推荐
- 【stm32cubeMX】使用HAL库点亮LED流水灯
stm32cubeMX使用HAL库点亮LED流水灯 1.安装STM32CubeMX 2.安装HAL库 3.新建项目 4.keil仿真调试 五.实现 六.参考资料 1.安装STM32CubeMX 官网下 ...
- 【嵌入式知识07】借助stm32CubeMX,使用STM32F103C8T6点亮LED流水灯
本文目录 一.简述 二.STM32CubeMX简介 1.利用CubeMX新建工程点亮LED灯 1)前期准备 2)新建工程 2.界面讲解 3.配置引脚 4.时钟源配置 5.工程管理 三.点亮LED 1. ...
- STM32CubeMX基于HAL库点亮LED灯
开发环境:Windows 软件: 1.STM32CubeMX 6.3.0 2.MDK 5.14 一.cubeMX的基本配置 1.选择MCU 2.配置时钟 查看电路图,8MHz的高速外部晶振接到 OSC ...
- GPIO端口初始化设置,STM32F103点亮LED流水灯过程
文章目录 一.STM32F103系列芯片地址映射和寄存器映射原理 1.什么是寄存器 2.地址映射和寄存器映射 3.寄存器地址查找 二.GPIO端口初始化设置 1.GPIO简介 2.配置时钟 3.输入输 ...
- STM32F03寄存器方式点亮LED流水灯
STM32F03寄存器方式点亮LED流水灯 文章目录 STM32F03寄存器方式点亮LED流水灯 一.题目内容 二.STM32F03系列芯片的地址映射和寄存器映射映射原理:了解GPIO端口的初始化设置 ...
- STM32F103C8T6以寄存器方式借助面包板搭建电路点亮LED流水灯详解
文章目录 一.寄存器原理 1.什么是寄存器 2.如何访问寄存器 二.GPIO端口的初始化设置 1.时钟配置 (1)找到时钟使能寄存器映射基地址 (2)找到端口偏移地址以及对应端口所在位置 (3)使能对 ...
- STM32F103寄存器方式点亮LED流水灯
实验要求:以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED 搭建电路,使用GPIOB.GPIOC.GPIOD这3个端口控制LED灯,轮流闪烁,间隔时长1秒.1)写出 ...
- 【嵌入式08】STM32F103C8T6寄存器方式借助面包板点亮LED流水灯详解
文章目录 一.题目简述 二.简述:初始化GPIO,点亮LED灯 三.工程文件模板的建立 四.使用寄存器点亮LED灯--代码部分 1.硬件连接设计 2.打开之前建立的工程模板 3.代码编写 4.硬件连接 ...
- 点亮led流水灯c语言程序,用数组的指针控制LED流水灯--C语言编程
#include/************************************************* 函数功能:延时约150ms (3*200*250=150 000μs=150ms ...
最新文章
- eclipse 向HDFS中创建文件夹报错 permission denied
- 2021/6/20~22 每天学习python 30分钟 -了解python - python的运算符
- 【记录】ubuntu18.04 终端下No module named numpy No module name cv2
- android 获取网卡mac_Java获取Linux安卓设备的mac地址方法
- java wrap方法_Java WritableCellFormat.setWrap方法代码示例
- c语言链表常错,C语言链表,哪里错了?
- 输入这是我的第一个python程序_「vs2017」vs2017 开始自己的第一个Python程序 - seo实验室...
- 每天一个小异常——ssh整合空指针异常
- Windows域控 批量设置用户下次登录 修改密码【全域策略生效】
- CDN 原理和几种变形(DCDN/ECDN/PCDN/SCDN)
- 分布式:分布式系统的设计
- 自然语言处理技术发展简史
- win10安装杜比驱动
- python自然语言学习之处理原始文本中3.1访问2554文本《罪与罚》出现问题解决
- 硬笔书法“案”字怎样书写正确?“最美中国字”来教你!
- 4gl 的内建函数和操作符简介
- IIS开启伪静态后html静态页面无法访问的解决方法
- 【Codeforces 1392F】Omkar and Landslide | 思维、结论
- Exception in thread “main“ java.lang.NullPointerException问题
- 谷粒商城12——购物车模块、消息队列RabbitMQ