系列文章目录

文章目录

  • 系列文章目录
  • 一、实验工具
  • 二、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流水灯相关推荐

  1. 【stm32cubeMX】使用HAL库点亮LED流水灯

    stm32cubeMX使用HAL库点亮LED流水灯 1.安装STM32CubeMX 2.安装HAL库 3.新建项目 4.keil仿真调试 五.实现 六.参考资料 1.安装STM32CubeMX 官网下 ...

  2. 【嵌入式知识07】借助stm32CubeMX,使用STM32F103C8T6点亮LED流水灯

    本文目录 一.简述 二.STM32CubeMX简介 1.利用CubeMX新建工程点亮LED灯 1)前期准备 2)新建工程 2.界面讲解 3.配置引脚 4.时钟源配置 5.工程管理 三.点亮LED 1. ...

  3. STM32CubeMX基于HAL库点亮LED灯

    开发环境:Windows 软件: 1.STM32CubeMX 6.3.0 2.MDK 5.14 一.cubeMX的基本配置 1.选择MCU 2.配置时钟 查看电路图,8MHz的高速外部晶振接到 OSC ...

  4. GPIO端口初始化设置,STM32F103点亮LED流水灯过程

    文章目录 一.STM32F103系列芯片地址映射和寄存器映射原理 1.什么是寄存器 2.地址映射和寄存器映射 3.寄存器地址查找 二.GPIO端口初始化设置 1.GPIO简介 2.配置时钟 3.输入输 ...

  5. STM32F03寄存器方式点亮LED流水灯

    STM32F03寄存器方式点亮LED流水灯 文章目录 STM32F03寄存器方式点亮LED流水灯 一.题目内容 二.STM32F03系列芯片的地址映射和寄存器映射映射原理:了解GPIO端口的初始化设置 ...

  6. STM32F103C8T6以寄存器方式借助面包板搭建电路点亮LED流水灯详解

    文章目录 一.寄存器原理 1.什么是寄存器 2.如何访问寄存器 二.GPIO端口的初始化设置 1.时钟配置 (1)找到时钟使能寄存器映射基地址 (2)找到端口偏移地址以及对应端口所在位置 (3)使能对 ...

  7. STM32F103寄存器方式点亮LED流水灯

    实验要求:以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED 搭建电路,使用GPIOB.GPIOC.GPIOD这3个端口控制LED灯,轮流闪烁,间隔时长1秒.1)写出 ...

  8. 【嵌入式08】STM32F103C8T6寄存器方式借助面包板点亮LED流水灯详解

    文章目录 一.题目简述 二.简述:初始化GPIO,点亮LED灯 三.工程文件模板的建立 四.使用寄存器点亮LED灯--代码部分 1.硬件连接设计 2.打开之前建立的工程模板 3.代码编写 4.硬件连接 ...

  9. 点亮led流水灯c语言程序,用数组的指针控制LED流水灯--C语言编程

    #include/************************************************* 函数功能:延时约150ms (3*200*250=150 000μs=150ms ...

最新文章

  1. eclipse 向HDFS中创建文件夹报错 permission denied
  2. 2021/6/20~22 每天学习python 30分钟 -了解python - python的运算符
  3. 【记录】ubuntu18.04 终端下No module named numpy No module name cv2
  4. android 获取网卡mac_Java获取Linux安卓设备的mac地址方法
  5. java wrap方法_Java WritableCellFormat.setWrap方法代码示例
  6. c语言链表常错,C语言链表,哪里错了?
  7. 输入这是我的第一个python程序_「vs2017」vs2017 开始自己的第一个Python程序 - seo实验室...
  8. 每天一个小异常——ssh整合空指针异常
  9. Windows域控 批量设置用户下次登录 修改密码【全域策略生效】
  10. CDN 原理和几种变形(DCDN/ECDN/PCDN/SCDN)
  11. 分布式:分布式系统的设计
  12. 自然语言处理技术发展简史
  13. win10安装杜比驱动
  14. python自然语言学习之处理原始文本中3.1访问2554文本《罪与罚》出现问题解决
  15. 硬笔书法“案”字怎样书写正确?“最美中国字”来教你!
  16. 4gl 的内建函数和操作符简介
  17. IIS开启伪静态后html静态页面无法访问的解决方法
  18. 【Codeforces 1392F】Omkar and Landslide | 思维、结论
  19. Exception in thread “main“ java.lang.NullPointerException问题
  20. 谷粒商城12——购物车模块、消息队列RabbitMQ

热门文章

  1. SSL/TSL握手解析
  2. 游戏程序开发:状态驱动的游戏智能体设计 (二)
  3. 与“番茄”有染 红果老总身份识破被刑拘
  4. 如何辨别身边的渣男(倾情j奉制)
  5. 多进程android webview,Android Pie(9.0)WebView在多进程中
  6. 阿萨姆奶茶营销策划书 案例
  7. linux-编译ko
  8. Crackme #1
  9. poj 3278 Catch That Cow(广搜)
  10. 阿里云OSS对象存储服务购买与基础使用指南