:使用外部晶振配置LED灯闪烁)
本专栏记录STM32开发各个功能的详细过程方便自己后续查看当然也供正在入门STM32单片机的兄弟们参考本小节的目标是使用STM32F429IGT6单片机野火的开发板通过STM32CubeMX软件配置并使用外部8MHz晶振实现PB4引脚的LED灯每一秒钟闪烁一次主要目的就是验证整个开发板的硬件配置、开发调试完整流程为后面的开发打下基础涉及到的知识有外部晶振的配置配置引脚为输出STM32CubeMX的使用我是将PB4引脚接的LED所以本小节是以PB4为例记录的如果需要将其他引脚配置为LED灯那将PB4改为其他对应的引脚即可。文章目录一、安装F4的STM32CubeMX 库1.1 在线安装1.2 离线安装二、硬件配置2.1 硬件接线2.2 STM32CubeMX 硬件配置三、STM32CubeIDE 编写LED闪烁代码四、程序编译与下载五、扩展彩色灯闪烁一、安装F4的STM32CubeMX 库1.1 在线安装STM32CubeMX 库固件支持包的安装支持在线安装以STM32G030C8T6 单片机为例进行库安装双击STM32CubeMX 可执行程序选择菜单Help 下面的Manage embedded software packages3. 找到下图 所示Package of STM32F4 Series 打钩再点击箭头所示Install4.安装过程中会有进度条显示如果安装成功原先打钩地方会变成绿色方框点击CLOSE 完成安装如果安装失败则使用离线安装的方式进行安装1.2 离线安装直接将包复制到\Repository目录推荐因为我在自己的笔记本上没有特殊防火墙在线安装好2.8版本的库文件后发现在存放这个库的目录下比不装2.8的时候也就只多出了一下STM32Cube_FW_G0_V1.6.1这个文件夹如下图所示至于这个Repository 文件夹怎么确认是哪个路径如下图所示所以我想到了另外一种离线安装的方法想办法得到这个多出来的文件夹手动放到公司那台不能在线安装的电脑的对应Repository Folder文件夹不就可以了。所以最后一种方法就是把这个文件夹直接放到上图所示的Repository Folder路径下得到这个目标文件夹有两种方法第一你找一台能在线安装的电脑在线安装完成后从Repository Folder可以拿到这个压缩包第二从我上传的资源中下载拿到资源后解压到Repository Folder路径下即可如下图所示打开STM32CubeMX看一下二、硬件配置2.1 硬件接线我使用的是野火的STM32F429IGT6开发板烧录器使用STLink实物图如下注意1、开发板的电源线要插上2、STLink一头插进电脑USB口另一头通过排线查到开发板的JTAG口2.2 STM32CubeMX 硬件配置打开 STM32CubeMX开始新建工程选择芯片型号点击Access to MCU Selector。在搜索框输入STM32F429IGT在右侧列表中选择STM32F429IGTx野火挑战者使用的是这个144脚/176脚芯片型号匹配即可点击右上角的Start Project。配置时钟源 (RCC)左侧菜单栏展开System Core- 点击RCC。在High Speed Clock (HSE)下拉框选择Crystal/Ceramic Resonator外部晶振。配置调试接口 (SYS)左侧菜单栏System Core- 点击SYS。在Debug下拉框选择Serial Wire这是你的DAP仿真器用的SWD接口必须选否则下次可能无法下载。配置GPIO引脚在右侧芯片图上找到PH10引脚左键点击选择GPIO_Output。左侧菜单栏展开System Core- 点击GPIO。在列表中找到PH10点击它在下方的配置框中GPIO output level: 选择High因为LED是低电平点亮初始设为高电平让它灭掉。GPIO mode:Output Push Pull(推挽输出)。GPIO Pull-up/Pull-down:No pull。Maximum output speed:Low或High都行。配置时钟树 (Clock Configuration)切换到顶部的Clock Configuration标签页。在 PLL Source Mux 那里点击 HSE 旁边的圆圈。找到HCLK (MHz)这一栏直接输入180然后按回车。软件会自动弹出提示帮你计算分频和倍频系数点击OK即可F429最高主频就是180MHz。生成工程代码切换到顶部Project Manager标签页。Project Name: 自己起个名字比如F429_LED_Reg。Project Location: 选择你的代码存放路径注意路径中绝对不要包含中文和空格。Toolchain / IDE: 选择STM32CubeIDE。点击右上角的GENERATE CODE按钮生成完毕后点击Open ProjectIDE会自动打开。三、STM32CubeIDE 编写LED闪烁代码工程用STM32CubeIDE打开后在左侧Project Explorer中找到Core/Src/main.c双击打开。找到主循环在main.c中往下拉找到/* USER CODE BEGIN WHILE */和/* USER CODE END WHILE */之间的区域。编写LED闪烁代码将以下代码复制到while (1)内部一定要在USER CODE区域内这样以后重新用CubeMX生成代码时你的代码才不会被覆盖while(1){// 1. 翻转 PH10 引脚的电平如果原来是低电平就变高原来高就变低HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_10);// 2. 调用 HAL 库的毫秒级延时函数延时 1000 毫秒即 1 秒HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}四、程序编译与下载编译工程点击上方工具栏的小锤子图标 (Build Debug)或者按Ctrl B。查看下方Console窗口提示Build Finished. 0 errors, 0 warnings即表示编译成功。连接开发板把STLink仿真器插上电脑另一头接开发板的JTAG接口注意板子要供电打开电源开关。把开发板的BOOT0和BOOT1都跳线到GND从内部Flash启动。设置下载器以及下载程序点击上方工具栏的绿色小虫子/播放键(Debug)。因为我是用的STLink所以按如下进行配置第一次运行会提示你下载程序到芯片中。程序下载完后会自动停在第main函数的第一行如果配置了断点的话。此时按下键盘的F8或者点击上方绿色的Resume按钮让程序全速运行。程序运行后就可以看到开发板上电源灯旁边的小灯红颜色开始闪烁了。五、扩展彩色灯闪烁看原理图我们可以发现这个LED是个彩色LEDPH10控制红色PH11控制绿色PH12控制蓝色所以我们可以配置一个彩色灯的闪烁。点开目录下的LED_Test.ioc可以直接打开MX在原来的基础上进行配置配置新增的 GPIO 引脚在右侧芯片图上找到 PH11 引脚左键点击选择 GPIO_Output。再次找到 PH12 引脚左键点击选择 GPIO_Output。此时你的 PH10, PH11, PH12 应该都变成了绿色代表输出模式。检查引脚初始状态左侧菜单栏展开 System Core - 点击 GPIO。你会看到列表里有 PH10、PH11、PH12 三个引脚。确保它们三个的 GPIO output level 都是 High高电平即初始状态灯全灭。确保 GPIO mode 都是 Output Push Pull推挽输出。重新生成代码点击右上角 GENERATE CODE。如果弹出警告问是否覆盖点击 Yes。生成完毕后点击 Open Project 回到 IDE。回到 IDE 后打开 Core/Src/main.c找到 while (1) 循环区域。将之前的代码替换为下面的完整代码。注意一定要写在 /* USER CODE BEGIN WHILE/ 和 /USER CODE END WHILE */ 之间。/* Infinite loop *//* USER CODE BEGIN WHILE */while(1){/* 第一步亮红灯 */HAL_GPIO_WritePin(GPIOH,GPIO_PIN_10,GPIO_PIN_RESET);// PH10 输出低电平红亮HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_SET);// PH11 输出高电平绿灭HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET);// PH12 输出高电平蓝灭HAL_Delay(500);// 保持 0.5 秒/* 第二步亮绿灯 */HAL_GPIO_WritePin(GPIOH,GPIO_PIN_10,GPIO_PIN_SET);// 红灭HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_RESET);// 绿亮HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET);// 蓝灭HAL_Delay(500);/* 第三步亮蓝灯 */HAL_GPIO_WritePin(GPIOH,GPIO_PIN_10,GPIO_PIN_SET);// 红灭HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_SET);// 绿灭HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_RESET);// 蓝亮HAL_Delay(500);/* 第四步亮黄灯红绿混色 */HAL_GPIO_WritePin(GPIOH,GPIO_PIN_10,GPIO_PIN_RESET);// 红亮HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_RESET);// 绿亮HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET);// 蓝灭HAL_Delay(500);/* 第五步全亮红绿蓝混色为白光 */HAL_GPIO_WritePin(GPIOH,GPIO_PIN_10,GPIO_PIN_RESET);// 红亮HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_RESET);// 绿亮HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_RESET);// 蓝亮HAL_Delay(500);/* 第六步全灭 */HAL_GPIO_WritePin(GPIOH,GPIO_PIN_10,GPIO_PIN_SET);// 全高电平全灭HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET);HAL_Delay(500);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */重新编译下载就可以看到LED在以红、绿、蓝、黄、白的顺序在闪烁了。