按键扫描函数的编写:采用GPIO输入库函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
关于static的使用:具有记忆功能,存储上一次函数执行的返回值,只执行一次。用来写按键扫描函数,可以记忆键值。
两种模式的按键扫描,
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;这个语句只执行一次。。
if(mode==1) key_up=1;//支持连续按
if(key_up && KEY按下)
{
delay_ms(10);//延时,防抖
key_up=0;//标记这次key已经按下
if(KEY确实按下)
{
return KEY_VALUE;
}
}else if(KEY没有按下) key_up=1;
return 没有按下
}
通过独立写跑马灯与按键扫描函数,调用库函数写程序的基本步骤如下:
1.使能按键对应IO口时钟
2.初始化GPIO口
3.调用的部分的初始化程序(头文件中)
4.主函数
C语言复习
1.位操作:6种位操作(&,|,^(异或),~(取反),<<(左移),>>(右移))
2.define宏定义关键词
3.ifdef条件编译
4.extern变量申明
C语言中extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里面要注意,对于extern申明变量可以多次,但定义只有一次。
5. typedef类型别名,定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。在结构体申明的时候可以定义变量,也可以申明之后定义,方法是:
6.Struct 结构体名字 结构体变量列表 ;同一个类型可以用数组,不同类型可以用结构体组织。 结构体可扩展性强。
7.C语言关键字 :static
Static申明的局部变量,存储在静态存储区。
它在函数调用结束之后,不会被释放。它的值会一直保留下来。
所以可以说static申明的局部变量,具有记忆功能
时钟系统和时钟初始化:
1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统时钟或者用作PLL时钟输入。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。(我们采用的是8M)
③、LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC
⑤、PLL为锁相环倍频输出。STM32F4有两个PLL:
主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。
第一个输出PLLP用于生成高速的系统时钟(最高168MHz)
第二个输出PLLQ用于生成USB OTG FS的时钟(48MHz),随机数发生器的时钟和SDIO时钟。
专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。
2. 系统时钟SYSCLK可来源于三个时钟源:
①、HSI振荡器时钟
②、HSE振荡器时钟
③、PLL时钟3.STM32F4时钟信号输出MCO1(PA8)和MCO2(PC9)。
MCO1:用户可以配置预分频器(1~5)向MCO1引脚PA8输出4个不同的时钟源:
HIS,LSE,HSE,PLL
MCO2:用户可以配置预分频器(1~5)向MCO2引脚PC9输出4个不同的时钟源:
HSE,PLL,SYSCLK,PLLI2S
MCO最大输出时钟不超过100MHz
任何一个外设在使用之前,必须首先使能其相应的时钟。
看不懂时钟!
麻痹,太难了
肿么办呀。。。。。都不懂
STM32按键扫描与C语言知识点总结
本文介绍了STM32中按键扫描函数的编写,利用GPIO输入库函数及static关键字实现防抖动处理。讲解了C语言的位操作、宏定义、条件编译、类型别名以及static的作用。此外,还概述了STM32的时钟系统,包括5个时钟源和系统时钟的选择。最后,作者表达了对时钟配置复杂性的困惑。
2948

被折叠的 条评论
为什么被折叠?



