学习之余,写这篇博客来记录学习过程,纰漏之处,多多包涵。
cubemx部分:
1. 配置debug,目的是使程序可以多次编程,如果不配置此项,只能烧录一次。
2.打开晶振
3.配置引脚
在配置引脚时要注意引脚对应的外设,通过查阅 “IO引脚分配图”我们可以找到按键以及LED灯。
在STM32F103ZET6中,PB5/PE5对应不同颜色的LED灯,将其设置为“Output”。
PE3/PE4则对应按键KEY1/KEY0,将其设置为输入“Input”。
如果配置错误,点击“Reset_State”复原。
同时,对应不同的应用场景,要配置GPIO的具体模式,对应KEY0/KEY1的配置,则根据其开发手册中的电路图具体分析,将其配置为上拉输入“Pull-up”: 把电位拉高,拉到 Vcc,把一个不确定的信号通过一个电阻嵌位在高电平,电阻会起到限流的作用。
右下角的查询按钮可以帮助我们快速找到对应的引脚。
配置好引脚之后配置一些基础设置
在①中
配置项目名称以及存储路径,注意不要出现中文,否则可能会产生错误。
选择MDK作为IDE。
在②中
1中选择第一个或者第二个,区别在于生成的代码是否为必需的,对于像我这样的初学者来说,我们选择2,只生成必需的代码。
2中勾选第一个:生成.c和.h文件
在此之后,在cubemx中的配置就告一段落了,接下来点击右上角的“GENERATE CODE”,伟大的cubemx就会为我们生成代码。
点击open project,直接打开Keil
有过标准库学习基础的同学可以打开这个gpio.c文件查看cubemx帮我们进行的初始化操作。
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
/*Configure GPIO pins : PE3 PE4 */
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PE5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PB5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
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);
}
(比起标准库手敲,是不是快乐多了)
接下来就是编写业务代码,以实现我们按键控制LED灯亮灭的功能
以上就是借助cubemx初始化,按键控制led的全部操作了
笔者才疏学浅,仅仅是最基础的按键led,也深知自己有很多理解不足甚至错误的地方,欢迎同学们批评指正,感激不尽。
后续如有机会,则更新外部中断、定时器中断以及pwm的内容。