基于stm32cubeMX 实现流水灯

本文介绍了如何使用STM32cubeMX进行流水灯的软件配置,包括下载过程、内部配置、keil5上的运行步骤,以及硬件结果的展示。通过配置RCC时钟、设置GPIO为输出、选择Serial Wire调试接口等步骤,最终在keil5中成功运行代码,并在硬件上观察到预期的流水灯效果。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


STM32cubeMX的下载

stm32cubeMX下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html

请添加图片描述
根据提示一步步点next就行;
进来之后点击help中的请添加图片描述
下载固态库文件
我下载的是1.8.4版本的,做出来有问题,然后又下了1.8.3版本的
请添加图片描述

一,软件内部配置

创建新工程
点击file中的new project
请添加图片描述

打开rcc时钟寄存器请添加图片描述
请添加图片描述
配置系统调试接口sys,选择Serial Wire
请添加图片描述
将需要用到的三个GPIO端口设置成output

请添加图片描述

GPIO output level:有low和high两种选择,一般选择low
GPIO mode:推挽输出和开漏输出两者模式,两者模式的区别在于推挽输出中1代表VCC,0表示GND;开漏输出中1代表高阻态,0代表GND。
GPIO Pull-up/Pull-down:输入需要上下拉,输出一般没有上下拉
Maxinum output speed:最大的输出速度,一般选择low就可以了。

点击project manager
设置不同的参数
比如
toolchain的选择必须是
mdkarm v5

请添加图片描述
点击open object
请添加图片描述

请添加图片描述

二,keil5 上的运行

        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//亮
		HAL_Delay(1000);//时延1秒
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//灭
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//亮
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//灭
		HAL_Delay(1000);	
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//亮
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//灭
		HAL_Delay(1000);

插入到main.c主函数的while(1)循环中去
点击魔术棒

请添加图片描述
请添加图片描述

运行
请添加图片描述
打开示波器:点击

请添加图片描述
请添加图片描述

记住将所有的参数的display type 设置成bit

点击开始运行,得到如下波形图
请添加图片描述

三,硬件的结果

根据上一次实验的基础,将代码烧录到stm32芯片中去,然后点击开始编译,得到下面的结果
请添加图片描述

总结

这次实验对我来说压力有点大其实,主要是新的软件不怎么会使用,加上英语有点差,让人有点受不了

参考文献

https://blog.youkuaiyun.com/qq_43279579/article/details/112213196
https://blog.youkuaiyun.com/qq_43279579/article/details/112233696

STM32CubeMX平台上实现基于STM32F103C8T6的流水灯项目,通常涉及以下几个步骤: 1. **配置硬件**: 首先,需要在STM32CubeMX工具中选择你的STM32F103C8T6芯片并生成对应的 HAL (Hardware Abstraction Layer) 端口驱动程序配置。确保GPIO用于LED控制,并设置合适的推挽输出模式。 2. **初始化GPIO**: 使用HAL库提供的函数如`GPIO_Init()`来初始化GPIO,包括GPIO的时钟、方向以及模式设置。 3. **定时器设置**: 流水灯通常会通过软件定时器来控制LED的闪烁。你可以使用STM32的TIM1或TIM2定时器,配置好周期和分频因子,然后连接到中断处理函数中。 4. **编写中断服务函数(ISR)**: 为定时器的溢出或到达某个特定时间点设置中断。在这个函数中,你需要更新LED的状态,比如轮流点亮下一个LED。 5. **LED状态管理**: 创建一个数组或者变量来存储每个LED的状态,初始全关闭,然后按照一定的顺序(例如从左到右或右到左)改变状态。 6. **主循环和LED操作**: 在主循环中,启用定时器,并处理定时器中断。在中断处理完毕后,回到主循环继续下一轮计数。 示例代码片段: ```c void TIM1_IRQHandler(void) { static uint8_t ledIndex = 0; GPIO_SetBits(LED_PORT, LED_PIN(ledIndex)); // 开启当前LED ledIndex = (ledIndex + 1) % NUM_LEDS; // 移动到下一个LED } void configure_TIM1() { // ... 完成TIM1的配置 HAL_TIM_Start(&htim1); // 启动定时器 } int main(void) { // ... 初始化GPIO和TIM1 configure_TIM1(); while (1) { // 主循环,等待定时器中断 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值