蓝桥杯STM32CubeMX和Keil5

STM32CubeMX的配置过程基于芯片STM32G431RBT6。

下图为第15、16届嵌入式赛道所使用的以STM32G431RBT6为主控芯片的开发板。至于该开发板的原理图等相关资源会在讲解各个模块功能时提到,在此不在赘述。那我们直接进入主题,开始CubeMX的配置。


1、Keil5软件

        Keil软件将会是我们接触嵌入式必要的一个软件。就比如你当初学习C语言时想要输出“Hello world!!!”,那么你首先需要找一个编程软件————CodeBlacks。那么,你想要与开发板进行交互,编写代码并且将代码烧录到芯片FLASH中,就需要Keil5的帮助。

        1、1 Keil软件的安装

STM32入门(一):Keil_5下载和安装教程_keil uvision5-CSDN博客

[2-1] 软件安装_哔哩哔哩_bilibili

Keil5详细的安装教程及其相关环境的配置我便不再进行讲解。上述链接讲解的很好,初学者可以根据他们的讲解的内容进行破解版Keil5的安装和环境的配置。




2、 STM32cubeMX软件的下载和环境的配置

        链接: https://pan.baidu.com/s/1CkyZd66qjoAP525zaF07Qg  提取码:2zcm

在蓝桥杯官方提供的资料中就有该软件相关的下载和环境配置的文件。

获取该文件后,将该文件进行解压,找到Tools >>> STM32_CUBE_MX后便能找到该软件的资料。将其中的.exe应用程序下载下来便能成功实现软件的下载和环境的配置。

        

2、1 打开应用程序

        点击ACCESS TO MCUSELECTION,进行芯片型号的选择。

        点击后可能会加载一段时间,请耐心等待。

        然后在1处输入我们要选择的芯片STM32G431RBT6;在2处点击第一个选择框;在3处点击Start Project按钮后便能进入芯片相关资源的配置界面,比如:GPIO(通用输入输出General Purpose Input/Output)、定时器(Timer)、UART/USART(异步通信/同步异步通信)等。

2、2配置DEBUG调试端口、RCC时钟配置模块(Reset and Clock Control)

        DEBUG调试端口和代码的调试有关,当我们配置了该功能时,当我们在Keil5软件中编程时或者是在测试时发现测试结果与我们期望的结果不一样时,便能利用Keil5的debug功能进行调试,我们就能设置断点、单步运行、全速运行以及查看寄存器的数值等相关功能。

2、3 配置Clock时钟树

        

由于之前我们配置RCC时,选择了芯片的外部晶振,该晶振输出的方波频率为24MHz。当配置时钟树时我们需要在1处输入24,同时一般在蓝桥杯官方比赛时一般都是要求在80MHz的频率下进行比赛,故我们在2处输入80后,点击回车键Enter,便能得到3的结果。

2、3 配置文件及生成文件

        注意:文件命名时不要使用中文

最后点击GENERATE CODE




3、 安装元器件库

        在Keil5和STM32cubeMX同时安装好的情况下,点击Open Project,便会自动打开Keil软件。

        点击1按钮,进入:

        点击file中的import:

        同样在蓝桥杯官方提供的资料中找到该文件(文件路径不要使用中文),将该文件复制到另外一个文件夹以英文命名的新键文件夹便也可避免中文件夹使用中文的问题。

        找到文件Keil.STM32G4xx_DFP.1.2.0.pack文件的路径,并且导入。导入完成后返回界面。

        如界面所示,依照如图顺序,用鼠标依次点击后,发现console控制台上显示"0 Error (s), 0 Warning(s)".

        那么恭喜你,你成功了。

如果您阅读了该篇文章后,还是未能解决您所遇到的问题,那么,我想对您说一声抱歉,请谅解一个初次写博客的小白和初入电子世界没多久的了解者;如果您解决了您的困难,我会感到十分的高兴。

        未能解决问题的读者可点击该链接进行进一步的破冰:【备战2025蓝桥杯 嵌入式组】CT117E-M4 新款开发板 3小时省赛模块 速成总结_哔哩哔哩_bilibili

        谢谢您的阅读!!!

STM32CubeMax是一个基于STMicroelectronics STM32微控制器的软件开发套件,它提供了一系列库文件驱动程序,方便用户快速上手STM32的硬件操作。Keil5则是STM32的官方集成开发环境(IDE)。 要通过PWM控制LED实现1s3s的呼吸灯效果,并通过按键切换周期,首先你需要做的是设置GPIO作为输入用于接收按键信号,另一组GPIO作为PWM输出连接到LED。这里是一段简单的示例代码: ```c #include "stm32f4xx.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_tim.h" // 定义定时器、GPIO按键相关的宏 #define LED_PIN GPIO_Pin_0 #define KEY_PIN GPIO_Pin_1 #define KEY_GPIO_PORT GPIOB #define PWM_TIM TIM2 #define PWM_CHANNEL TIM_CHANNEL_1 // 定义PWM的频率占空比范围 #define PWM_FREQ_HZ 1000 // 1kHz #define MIN_DUTY_CYCLE 5 // % (最小5%) #define MAX_DUTY_CYCLE 95 // % (最大95%) void setup_PWM(uint32_t period_ms) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 启动TIM2时钟 TIM_TimeBaseInitTypeDef timerConfig; timerConfig.TIM_Prescaler = (CPU_CLOCK_HZ / 1000) - 1; // 计算周期计数器分频 timerConfig.TIM_CounterMode = TIM_CounterMode_Up; // 上升沿计数 timerConfig.TIM_Period = ((period_ms * 1000) / PWM_FREQ_HZ) - 1; // 设置周期 timerConfig.TIM_ClockDivision = TIM_CKD_DIV1; timerConfig.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(&PWM_TIM, &timerConfig); TIM_ARRPreloadConfig(&PWM_TIM, ENABLE); // 预装载寄存器 TIM_Cmd(&PWM_TIM, ENABLE); // 启动定时器 TIM_OCInitTypeDef ocConfig; ocConfig.TIM_OCMode = TIM_OCMode_PWM1; // 输出模式为PWM ocConfig.TIM_OutputState = TIM_OutputState_Enable; // 开启输出 ocConfig.TIM_OCPolarity = TIM_OCPolarity_High; // 输出高电平 ocConfig.TIM_OutputCompare = (MAX_DUTY_CYCLE * (PWM_FREQ_HZ / 1000)) - 1; // 设置占空比上限 TIM_OC1Init(&PWM_TIM, &ocConfig); TIM_OC1PreloadConfig(&PWM_TIM, ENABLE); // 启用预装载 } void toggle_LED(void) { TIM_OC1Cmd(&PWM_TIM, !TIM_OC1StateGet(&PWM_TIM)); // 切换PWM输出状态 } int main(void) { GPIO_InitTypeDef gpioConfig; gpioConfig.GPIO_Pin = LED_PIN | KEY_PIN; gpioConfig.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出 gpioConfig.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(KEY_GPIO_PORT, &gpioConfig); EXTI_InitTypeDef extiConfig; extiConfig.EXTI_Line = KEY_PIN; extiConfig.EXTI_Mode = EXTI_Mode_Interrupt; extiConfig.EXTI_Trigger = EXTI_Trigger_Rising; extiConfig.EXTI_LineCmd = ENABLE; EXTI_Init(&extiConfig); while (1) { if (EXTI_GetITStatus(KEY_PIN) != RESET) // 检查按键是否按下 { toggle_LED(); // 按键触发LED周期切换 EXTI_ClearITPendingBit(KEY_PIN); // 清除中断标志 } // 调整PWM周期,例如切换到1秒3秒 setup_PWM(current_period == 1000 ? 1000 : 3000); current_period = (current_period + 1) % 2; // 循环切换周期 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值