使用STMCubeMX生成代码实现点亮流水灯

本文详细介绍了如何通过STM32CubeMX配置STM32F103C8芯片,生成初始化代码,实现LED流水灯控制。步骤包括安装、初始化、代码编写和运行,适合初学者快速上手STM32开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装STM32cubeMX

在这里插入图片描述

  • 勾选第一个就好,点击Next
    在这里插入图片描述

  • 选择一个安装路径,点击确定,之后Next
    在这里插入图片描述

  • 点击Next
    在这里插入图片描述

  • 之后点击安装,安装完成如下图
    在这里插入图片描述

  • 安装完成之后还没完,打开STM32CubeMX,点击Help(这里可能会打不开,如果打不开等一下就好)
    在这里插入图片描述

  • 勾选依赖包并install now
    在这里插入图片描述

  • 开始在线安装,等待完成就好
    在这里插入图片描述

二、用STM32CubeMX初始化代码

  • 输入芯片型号,这里我用的STM32F103C8,然后点击最右侧的start project
    在这里插入图片描述

  • 点击System Core,再点击SYS,在debug选项中选择Serial Wire
    在这里插入图片描述

  • 把PLLCLK右边选上
    在这里插入图片描述

  • 将hse设为Crystal/Ceramic Resonator
    在这里插入图片描述

  • 点击相应的引脚设置输出寄存器,选择output那一项。我一共选了三个,分别是PA0,PB9,PC15
    在这里插入图片描述

  • 点击project manager,填写路径和项目名,将IDE改为MDK-ARM
    在这里插入图片描述

  • 进入code generate界面,选择生成初始化.c/.h文件,后面点击generate code,之后等待一下
    在这里插入图片描述

  • 点击Open就可以从keil中打开项目了

在这里插入图片描述

三、修改代码并点亮流水灯

  • 打开项目之后,打开main.c文件,找到while函数在里面添加实现功能的代码
    在这里插入图片描述
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//PA0亮灯
		HAL_Delay(500);//延时0.5s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯
		HAL_Delay(500);//延时0.5s		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_Delay(500);//延时0.5s
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_Delay(500);//延时0.5s		
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
		HAL_Delay(500);//延时0.5s		
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(500);//延时0.5s
  • 注意:烧录运行,串口烧录要断电之后把boot0置0才能正常运行。

四、运行结果

  • 信号波形图
    在这里插入图片描述
  • 流水灯运行结果

STMCubeMX生成代码实现点亮流水灯

五、总结

使用STMCubeMX生成代码编程比自己写代码会方便很多,只需要自己写一个while函数中的内容就够了。同时也有一些微小的诧异比如将BOOT0置零。

六、参考资料

使用STMCubeMX生成代码(使用hal库)实现流水灯
搭建STM32开发环境——STM32CubeMX,Keil5

### STM32C8T6 HAL库与CubeMX使用教程 #### 配置环境 在使用STM32C8T6进行开发前,需确保已安装并配置好STMCubeMX工具以及相应的编译环境。通过STMCubeMX可以快速生成初始化代码,并利用HAL库实现硬件功能调用。 #### 创建新项目 在STMCubeMX中创建一个新的STM32C8T6项目。选择目标芯片型号为STM32F103C8Tx,并设置时钟树以满足应用需求[^1]。 #### GPIO配置 对于简单的LED控制实验,需要配置GPIO引脚作为输出模式。具体步骤如下: - 打开Pinout & Configuration界面。 - 将指定的GPIO引脚(如PA5、PB7等)配置为GPIO_Output模式。 - 设置默认状态为High或Low,取决于实际电路连接方式。 以下是基于HAL库的示例代码用于点亮单个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_TogglePin(GPIOA, GPIO_PIN_5); // 切换PA5引脚电平 HAL_Delay(500); // 延迟500ms } } static void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; // PA5 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 上述代码实现了对PA5引脚上的LED灯进行周期性闪烁的功能。 #### 流水灯设计 如果希望实现多个LED按照一定顺序依次亮灭,则可以通过循环改变不同GPIO的状态来完成此效果。下面给出一段简化版流水灯程序片段: ```c for(int i=0;i<NUM_LEDS;i++) { HAL_GPIO_WritePin(LED_Ports[i], LED_Pins[i], GPIO_PIN_SET); HAL_Delay(200); HAL_GPIO_WritePin(LED_Ports[i], LED_Pins[i], GPIO_PIN_RESET); } ``` 其中`NUM_LEDS`, `LED_Ports[]`, 和 `LED_Pins[]`分别表示总的LED数量及其对应的端口和针脚编号数组[^2]。 #### 蜂鸣器驱动 当涉及到更复杂的外设比如蜂鸣器时,除了基本的GPIO操作之外还需要注意一些细节问题。例如某些情况下可能因为调试接口占用资源而导致异常行为发生。对此可以在生成代码后手动修改相关部分关闭不必要的调试选项从而解决问题[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值