用stm32cubemx点亮一个流水灯

本文介绍如何使用STM32CubeMX工具进行STM32微控制器的开发环境搭建及初始化配置,涵盖外设配置、时钟树设置、C代码生成等内容。
STM32Cube  是一个全面的软件平台,包括了 ST 产品的每个系列。平台包括了 STM32Cube  硬件抽象层 ( 一个 STM32 抽象层嵌入式软件,确保在 STM32 系列最大化的便携性 ) 和一套的中间件组件 (RTOS, USB, FatFs, TCP/IP,  Graphics,  等等 ).
  • 直观的STM32微控制器的选择和时钟树配置
  • 微控制器图形化配置外围设备和中间件的功能模式和初始化参数
  • C代码生成项目覆盖STM32微控制器的初始化符合IAR™,Keil的™和GCC编译器。
      对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。
      1.新建工程
      打开 STM32cubeMX 软件,点击 New Project 。选择对应开板 MCU STM32F103ZET6 )。

      选择工程后进入工程界面,如下图所示。

      2.  配置外设。

      RCC设置,选择HSE(外部高速时钟)Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

      GPIO口功能选择,PF6,PF7,PF8,PF9LED1-LED4.找到对应管脚设置为GPIO_Output模式。(黄色引脚为该功能的GPIO已被用作其他功能,可以忽略。绿色表示管脚已使用)

      3. 时钟配置

              时钟配置采用图形配置,直观简单。各个外设时钟一目了然。STM32最高时钟为72M,此处只有在HCLK处输入72,软件即可自动配置。(RCC选择外部高速时钟)。

      4.功能外设配置

      在配置框我们可以看到有几个区域,分别对应的功能设置如下
      • Multimedia(多媒体):音频视频、LCD
      • Control(控制):定时器
      • Analog(模拟):DAC、ADC
      • Connectivity(通讯连接):串口、SPI 、I2C、USB、ETH
      • SYStem(系统):DMA(直接存储器存取)、GPIO、NVIC、RCC、看门狗
      • middlewares(中间件): FreeRTOS、FATFS、LwIP、USB
      此工程中DMA没用的不用配置,NVIC(嵌套中断向量控制器(Nested Vectored Interrupt Controller))配置中断优先级。RCC不用配置。

      • GPIO Pin Level (管脚状态):低电平
      • GPIO mode (管脚模式 ):推挽输出
      • Maximum output speed (最大输出速度):低速
      • User Label (用户标签):LED1
      更改用户标签,管脚配置图会显示管脚的标签。

      4.  功耗计算

      这个根据配置的外设计算功耗,不用理会。

      5. 生成工程报告

      点击Project –>Generate Reports或者点击快捷图标生成报告。系统会提示先创建一个工程项目。点击Yes设置工程。

      输入工程名,选择工程路径(注意不要出现中文,否则可能出错)。工具链/IDE选择MDK-ARM V5。最后面可以设置堆栈大小,此处默认不作修改。

      在Code Generator中找到Generated files框,勾选Generated periphera initialization as a pair of  '.c/.h' files per IP。外设初始化为独立的C文件和头文件。


      点击生成报告,工程目录下会生成txt文件和pdf文件,里面记录了我们刚才的设置。

      6.   生成工程代码

      点击Project –>Generate Code或者点击快捷图标生成工程代码。

      点击Open Project打开工程。到此就配置好工程外设初始化。

      点击Build按钮,Build Optput信息框会输出没有错误没有警告。
      6.   添加应用程序
      在gpio.c文件中可以看到LED管脚的初始化函数。

      在stm32f1xx_hal_gpio.h头文件中可以看到GPIO的操作函数。

      在main函数中的while循环中添加LED流水灯效果的应用程序。

      重新编译程序,点击下载到Open103Z-C开发板。如果提示错误,可以点击图标对Option for Target 的Dubug选项进行修改。(图上选的是ST-LINK)

      点击Settings->Flash Download勾选 Reset and Run选项。这样程序下载后自动启动运行,不用再按一下复位或者重新上电才能运行。
      程序下载到Open103Z-C开发板。可以看到LED1~LED4依次被点亮,实现流水灯的效果。

      总结: STM32Cube提供了固件库,用户可直接调用固件库函数来开发,并且可以很好的实现STM32-MCU全系列的代码一致性。同时STM32CubeMX工具提供的可视化引脚、外设、时钟等配置功能,可以帮助快速完成工程的建立、初始化。大大降低了开发者的工作量。
          后续我们会结合微雪Open746I-C开发板,通过 STM32cubeMX系列教程 讲解如何学习STM32F7系列的片上外设。通过STM32F7系列的学习,可以让各位更快的掌握其他系列的使用方法。
      
      ### STM32CubeMX GPIO 配置 LED 流水灯教程 为了实现基于STM32CubeMXLED流水灯功能,以下是详细的配置过程以及相关说明: #### 1. 使用STM32CubeMX初始化项目 启动STM32CubeMX软件并创建一个新的工程文件。选择目标芯片型号(如STM32F103C8),设置时钟树以确保系统时钟频率满足需求。 #### 2. 配置GPIO引脚作为输出模式 进入Pinout & Configuration界面,在左侧找到需要控制LED的引脚(例如红B9、绿C15、黄A4)。双击这些引脚将其配置为GPIO_Output模式[^1]。 具体操作如下: - 将B9、C15和A4分别设定为GPIO_Output。 - 设置Mode参数为“General purpose output”,Speed可以选择默认值或者更高速度。 - Pull-Up/Pull-Down选项通常保持未启用状态(No pull-up, no pull-down)。 完成上述配置后点击Generate Code按钮生成代码框架。 #### 3. 修改生成的源码来实现流水灯逻辑 打开生成后的Keil MDK或其他IDE环境中的`main.c`文件,在主循环部分编写用于驱动LED闪烁的代码片段。下面是一个简单的例子展示如何让三个不同颜色的LED依次亮起再熄灭形成流动效果: ```c #include "stm32f1xx_hal.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1){ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, SET); // Red ON HAL_Delay(500); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, RESET); // Red OFF HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, SET); // Green ON HAL_Delay(500); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, RESET); // Green OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, SET); // Yellow ON HAL_Delay(500); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, RESET); // Yellow OFF } } static void MX_GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; /** Configure pins as Output */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_15; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_4; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 此段代码实现了基本的三盏LED轮流点亮的功能,并利用了HAL库函数来进行具体的硬件交互处理[^2]。 #### 4. 连接实际电路与调试验证 按照之前提到的标准连线方式将USB转TTL模块连接至开发板上对应的管脚位置[^3]。确认无误之后即可上传编译好的固件到目标设备当中去测试运行情况。 ---
      评论
      成就一亿技术人!
      拼手气红包6.0元
      还能输入1000个字符
       
      红包 添加红包
      表情包 插入表情
       条评论被折叠 查看
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值