STM32初识-Keil5和CubeMX

硬件介绍

1.软件介绍-Keil5

stm32 开发 简单介绍+工程创建_开发stm32程序库-CSDN博客

安装详情和创建工程都在以上链接可以看到详细内容

KEIL5安装STM32的芯片支持包_keil5安装stm32芯片包-CSDN博客

因为stm32工程的创建并不像51那样简单,要根据官方的配置文件来才可以运行,所以在以上连接中有具体说明,就不在此文章中具体赘述

STM32的模板工程

 打开一个led灯闪烁例程文件

 

烧录方法

如何下载程序到stm32中
烧录工具有很多种,比如:串口、 J-Link ST-Link U-Link 等等,这里我使用 ST-Link

 主要接的就是GND,SWCLKSWDIO这三根线。打开STM32最小系统的PCB图,查找SWCLKSWDIO就可以连接:

 (gnd随便连就好了,vcc可以通过st-link连接也可以通过数据线连接)

然后将ST-Link插入电脑的USB口之后,打开设备管理器,若stm32-link显示感叹号,则要安装ST-Link的驱动;

右键STM32 STlink并选择“更新驱动程序”,并在电脑中找到驱动程序:;

安装完毕后图标显示正常,说明安装成功!

 在烧录之前还要在Keil5内进行一系列配置:

点击魔术棒按钮,选择“Debug”,在“Use”选择“ST-Link Debugger":

选择“Output”,勾选上“Create HEX file”:

这就完成了设置,之后就可以进行程序的烧写:

1. 点击Load,就可以把程序烧写进入STM32:

2. 没有报错之后,点击单片机右下角最左侧的“复位按钮”:

3. 此时程序已经成功烧写,可以观察到代码使得LED灯交替闪烁

 2. STM32CubeMX

STM32CubeMX简介及下载安装-CSDN博客安装过程在这位的讲解下差不多了

我就重点记录如何使用STM32CubeMX生成工程文件:

1. 点击“ACCESS TO MCU SELECTOR”(如果是第一次创建的话要等待一段时间下载配置文件)

2.  点击之后,在新生成页面的左上角输入具体的芯片型号并双击

然后CubeMX就会基于这个芯片生成一个新的界面:

接下来就可以通过在这个界面的操作,自动生成对应的代码,比如我要进行一个点灯的操作:
1. 同样,先通过STM32最小系统的PCB图,查找LED灯对应的电路:

可见LED1,2 分别接到了B8B9并且低电平灯亮高电平灯灭

2. 在CubeMX界面找到PB8和PB9的引脚,并左键点击:

这其实就是引脚的复用,此处我希望点灯,那需要这个引脚行使“GPIO_Output”的功能:

再点击左边的system core ->GPIO选项,就可以看到设置的引脚,并且CubeMX已经自动进行了一些初始化的配置了

也可以再点击PB8或PB9就可以进行进一步的设置:

可以设置

输出的是高电平还是低电平

输出的模式是“推挽输出”还是“开漏输出”;

是否要拉高或者拉低;

最大传输速度;

用户给的标签

3. 点击左侧的“SYS”选项,在“Debug”中选择“Serial Wire” (串口)
4. 点击上侧偏右的“Project Manager”大选项进行设置:

注意,项目的路径不能有中文!!否则文件会报错

还需在Toolchain/IDE设置成MDK-ARM,这样在项目生成之后会自动调用Keil

5. 同样在“Project Manager”选项下,左侧的“Code Generator”中这样设置:

6. 最后,点击右上角的“GENERATE CODE” :

7. 生成完成之后,按操作打开文件即可

8.打开文件后编译

9. 将代码烧录进单片机,先点击LOAD,再点击单片机的复位:

可见LED1,2对应的D3,D5两盏灯常亮,说明CubeMX生成的代码没有问题!

那么代码没问题,我们就来回过头来看一下Cube到底生成什么代码

主要观察main函数:

发现就是在初始化,如果选中并右键点击这些调用的初始化函数,就可以跳转到这些函数定义的地方:

其中这句代码是亮灯的关键

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

通过再次跳转这个函数查找定义之后就可以知道,这是一个写数据的函数,上图中是往GPIO口的8和9口写“0”,而经过刚刚的分析,LED灯低电平亮灯,所以这句话可以点灯。

那么既然知道了这个函数的作用,那就可以把这句话稍微修改然后复制到main函数的while 1循环中,实现闪烁灯的效果

 while (1)
  {
    /* USER CODE END WHILE */
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
		HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }

这就是最简单的,通过Cube代码进行二次开发,实现led闪。

同时,通过这个示例也可以看到CubeMX不是万能的,Cube只能生成初始化的代码,至于具体项目中的业务代码,还是要自己敲的!

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值