STM32裸机开发(2) — 使用STM32CubeMX点亮第一个LED

STM32裸机开发(2) — 使用STM32CubeMX点亮第一个LED

一、新建工程

使用STM32CubeMX新建一个工程,打开STM32CubeMX,点击创建一个工程
在这里插入图片描述
点击搜索STM32F103ZE,选中需要的封装,点击开始创建
在这里插入图片描述
我们可以先将工程保存一下,以免丢失,点击【File】->【Save Project】
在这里插入图片描述
工程新建好之后会直接进入【Pinout 】选项卡,这个时候界面会展示芯片完整引脚图,在引脚图中,我们可以对引脚功能进行配置。黄色的引脚主要是一些电源和 GND 引脚,如果某个引脚已经被使用,那么会显示为绿色。
在这里插入图片描述

二、配置时钟源(RCC设置)

对STM32 芯片而言,RCC 配置的重要性不言而喻。在 STM32CubeMX 中,RCC 相关设置却非常简单,因为它把时钟系统独立出来配置。在操作界面,依次点击选项卡Pinout->Peripherals->RCC 便可进入RCC 配置栏,我们只使用到 HSE,所以我们设置选项 High Speed Clock(HSE)的值为Crystal/Ceramic Resonator(使用晶振/陶瓷振荡器)即可。操作步骤如下图所示:
在这里插入图片描述
从上图还可以看出,在我们打开了HSE 之后,右边的引脚图中,相应的引脚会由灰色变为绿色,表示该引脚已经被使用。
接下来点击【Clock Configuration】开始配置系统时钟树。
在这里插入图片描述
我们把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:
①时钟源参数设置:HSE 或者HSI 配置。这里我们选择HSE 为时钟源,所以我们之前必须在RCC 配置中我们开启HSE。
②时钟源选择:HSE还是HSI。这里我们配置选择器选择 HSE 即可。
③主PLL 倍频系数配置。倍频系数我们设置为x9。
④系统时钟时钟源选择:PLL,HSI 还是HSE。这里毫无疑问,我们选择 PLL,选择器选择PLLCLK 即可。
⑤经过上面配置以后此时 SYSCLK=72Mhz。
经过上面的 7 个步骤,就会生成标准的 72MHz 系统时钟。接下来我们只需要依次配置AHB,Systick,APB1 和APB2 的分频系数,我们都配置为 1 即可。配置完成之后,那么 HCLK=72MHZ,Systick=72MHz,PCLK1=36MHz, PCLK2=72MHz 。
在这里插入图片描述

三、GPIO引脚功能设置

这里我们回到STM32CubeMX 的Pinout 选项,可以通过搜索栏输入PB5 即可找到PB5在引脚图中的位置如下图所示,然后点击PB5,在弹出的下拉菜单中,选择 IO 口的功能为GPIO_Output。(PB5接入了LED0)
在这里插入图片描述

四、生成工程源码

点击菜单【Project Manager】
在这里插入图片描述
【Toolchain/IDE】选择Makefile
在这里插入图片描述
按个人喜好,我这里选LL库
在这里插入图片描述
然后点击【GENERATE CODE】即可生成源码
在这里插入图片描述

五、配置VSCode

使用VSCode打开工程,【文件】->【打开文件夹】,选择生成工程的文件夹
在这里插入图片描述
打开main.c如下所示
在这里插入图片描述
我们需要添加几个插件
在这里插入图片描述
接下来需要做一些配置,这很重要

  1. 点击【文件】->【首选项】->【设置】
    在这里插入图片描述
    然后在搜索栏中输入intelli sensemode,将其选择为【gcc-arm】
    在这里插入图片描述

  2. 按【Ctrl+Shift+P】打开命令输入栏,输入【C/C++: 编辑配置(UI)】
    在这里插入图片描述
    然后在【定义】项目下添加如下三个宏定义

    __CC_ARM
    USE_FULL_LL_DRIVER
    STM32F103xE
    

    在这里插入图片描述
    其中第一条宏定义是告诉代码提示引擎使用gcc-arm的语法规则和库文件,如果不添加这条宏定义会出现如“uint32_t未定义”等错误。
    后面两条宏定义我们可以在Makefile文件中找到,但是VSCode检查语法的时候并不会去读Makefile,因此需要我们手动添加。注意前面的-D是Makefile的格式。
    在这里插入图片描述

  3. 在上面的【包含路径】栏添加头文件包含路径

    Core/Inc
    Drivers/STM32F1xx_HAL_Driver/Inc
    Drivers/CMSIS/Device/ST/STM32F1xx/Include
    Drivers/CMSIS/Include
    

    我们可以保留其默认的${workspaceFolder}/**,也可以删去,看个人喜好
    在这里插入图片描述
    同样的,我们也可以在Makefile中找到
    在这里插入图片描述

  4. 编译器路径选择gcc
    在这里插入图片描述

    扫描二维码关注公众号,回复: 12258248 查看本文章
  5. 如果编辑器还不能进行代码提示,在搜索栏搜索【prevent】,将搜索结果中的对勾取消
    在这里插入图片描述

六、修改代码,编译工程

将main函数的while循环修改为如下所示:

  while (1)
  {
    
    
    /* USER CODE END WHILE */
    LL_mDelay(500);
    LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_5);
    LL_mDelay(500);
    LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_5);
    /* USER CODE BEGIN 3 */
  }

然后在bash下输入make命令,可以看到,生成了len.hexled.bin文件
在这里插入图片描述

七、下载到开发板

打开【STM32CubeProgrammer】,找到生成的文件路径,点击下载即可
在这里插入图片描述
下载完后我们发现STLink连不上了,经过一番研究,最终发现在main函数开头调用了一个函数是JATG和SW失效了
在这里插入图片描述
我们将其注释掉然后通过串口再烧录即可
在这里插入图片描述
然后可以观察到LED0闪烁
在这里插入图片描述

八、附录

上一篇:STM32裸机开发(1) — 搭建GCC开发环境
下一篇:STM32裸机开发(3) — 使用汇编点亮LED灯

猜你喜欢

转载自blog.csdn.net/qq_38113006/article/details/111769062