这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。
废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列系统点灯按键配置都能明白如何通过参考手册去学习配置。而不是Ctrl c,Ctrl v。
首先要明白一个知识点,led灯、按键需要用到什么,引脚输出功能,引脚读取功能?这些功能具体到底是什么?
1.首先我得看看我F407开发板的原理图,我发现我的开发板电流是涌入电流(injected current)PC13,PC13需要拉低才能点亮LED。
总注入电流(所有I/O和控制引脚之和),F407涌入的电流之和不能大于25mA,3.3V/360Ω=9.1mA满足条件。
输出驱动电流
gpio(通用输入/输出)可以吸收或源高达±8ma,吸收或源高达±20ma(放宽VOL /VOH),但PC13, PC14和PC15可以吸收或源高达±3mA。PC13 ~ PC15的gpio在输出模式时,速度不能超过2mhz,最大负载30pf。这一部分内容是对于引脚拉高向外输出电流的必要知识点,但说实在的尽量不要用PC13-15去驱动led避免未知的麻烦,但是我这块开发板偏偏就是PC13,改不了了。
根据原理图,
若是上拉电阻:按键未按下时引脚读取的是VDD高电平1,若按键按下input被短接直接读取GND低电平0,状态有明确对应关系符合要求。
若是下拉电阻:按键未按下时引脚读取电平为GND低电平0,当若按键按下input被短接直接读取GND低电平0,不管按下还是不按都没有变化始终是低电平0。不符合要求。
时钟配置详见文一。
输入模式根据要求配置成上拉模式,cubemx配置完成。
去hal库里面看看有什么函数是可以调用的。
读取引脚函数,读取引脚输入状态,这个函数可以供按键使用。
状态改变函数,可改变输出状态。
go to definition后找到变量出处,SET对应1,RESET对应0。由上图知PC13需要为低电平0才可点亮LED灯,即选择状态为GPIO_PIN_RESET点亮。
toggled切换状态函数,可用于按键按下后翻转当前状态。
基于以上编写主程序。
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,GPIO_PIN_SET); //熄灭LED
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,GPIO_PIN_RESET); //点亮LED
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15)==0)
{
HAL_Delay(50);
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15)==0)
{
while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15)==0); //必须松开按键方可进入下一行程序
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
}
}
}
/* USER CODE END 3 */
}
这一步作用是下载完程序之后自动复位,若没有此过程需要人工手动复位。切记下载完程序是需要复位的。
编写完程序后测试效果
F407按键点灯
代码链接百度网盘:
链接:https://pan.baidu.com/s/1qXNn2ARYShyCGsNaRbtLMg?pwd=qk8w
提取码:qk8w