【菜刀易语言源码】【cooleditpro源码解析】【党建 整站源码】gpio_keys.c源码

时间:2024-11-20 16:41:47 来源:传媒公司源码 分类:焦点

1.【STM32H7教程】第17章 STM32H7之GPIO的HAL库API
2.单片机c语言编程
3.STM8库函数开发手册(1) //工程模板、GPIO、时钟

gpio_keys.c源码

【STM32H7教程】第17章 STM32H7之GPIO的HAL库API

       .1 初学者重要提示

       1、 如何阅读HAL库源码的问题

       HAL库实现的函数有复杂的,也有简单的,简单的菜刀易语言源码可以直接阅读代码。复杂的代码阅读起来比较耗时间,如果再配合参考手册抠每个寄存器的配置,那就更消耗时间了。所以对于这种函数,用户仅需了解每个部分实行的功能即可,而且HAL库都做了关键注释,以说明这部分实现的功能。所以用户没有必要去抠每个配置是如何实现的,仅需知道实现了什么功能。以后工程项目有需要了解具体配置时,再看即可。cooleditpro源码解析

       2、 学习本章节前,务必保证已经学习了第章。

       .2 GPIO涉及到的寄存器

       GPIO外设涉及到的寄存器比较少,也容易理解,推荐大家阅读GPIO源码的时候将参考手册中对应的寄存器功能做一个了解。

       很多时候,我们会直接调用GPIO的寄存器进行配置,而不使用HAL进行调用,以提高执行效率,特别是中断里面执行时。

       .3 源文件stmh7xx_hal_gpio.c

       这个文件主要是实现GPIO的引脚配置,学习这个文件注意事项:

       .3.1 函数HAL_GPIO_Init

       函数原型:

       函数描述:

       此函数用于初始化GPIO,此函数主要实现如下功能:

       函数参数:

       下面将结构体每个成员做个说明:

       成员Pull用于配置上拉下拉电阻:

       成员Speed用于配置GPIO速度等级,有下面四种可选:

       成员Alternate用于配置引脚复用,可选择的党建 整站源码复用方式在文件stmh7xx_hal_gpio_ex.h里面进行了定义,比如串口复用:

       注意事项:

       如果是程序运行期间的引脚状态切换,最好采用下面的方式或者直接寄存器操作:

       .3.2 函数HAL_GPIO_DeInit

       函数原型:

       函数描述:

       此函数用于复位IO到初始化状态,具体状态看函数原型中的注释即可。

       函数参数:

       使用举例:

       此函数的使用比较简单,需要调用的时候直接调用即可。

       .3.3 函数HAL_GPIO_ReadPin

       函数原型:

       函数描述:

       此函数用于读取引脚状态,通过GPIO的IDR寄存器读取。

       函数参数:

       使用举例:

       此函数的使用比较简单,需要调用的时候直接调用即可。

       .3.4 函数HAL_GPIO_WritePin

       函数原型:

       函数描述:

       此函数用于设置引脚输出高电平或者低电平。使用GPIO的BSRR寄存器进行设置,使用这个寄存器的好处是支持原子操作,由硬件支持的。原子操作的含义是操作过程不会被中断打断,而我们使用GPIO中另一个设置输出的寄存ODR是会被中断打断的。大家看下寄存器赋值操作对应的asp源码讲解反汇编,是由多条汇编指令组成的。

       函数参数:

       使用举例:

       此函数的使用比较简单,需要调用的时候直接调用即可。

       .3.5 函数HAL_GPIO_TogglePin

       函数原型:

       函数描述:

       此函数用于设置引脚的电平翻转,使用GPIO的ODR寄存器进行设置。

       函数参数:

       使用举例:

       此函数的使用比较简单,需要调用的时候直接调用即可。

       .3.6 函数HAL_GPIO_LockPin

       函数原型:

       函数描述:

       此函数用于锁住GPIO引脚所涉及到的寄存器,这些寄存器包括GPIOx_MODER,GPIOx_OTYPER,GPIOx_OSPEEDR,GPIOx_PUPDR,GPIOx_AFRL 和 GPIOx_AFRH。

       函数参数:

       注意事项:

       使用举例:

       此函数的使用比较简单,需要调用的时候直接调用即可。

       .4 如何使用HAL库的闲来股子源码GPIO驱动

       使用方法由HAL库提供(本章.3.1小节提供的例子就是这种方式):

       第1步:使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()。

       第2步:通过函数HAL_GPIO_Init()配置GPIO。

       (1) 通过结构体GPIO_InitTypeDef的成员Mode配置输入、输出、模拟等模式。

       (2) 通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。

       (3) 通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。

       (4) 如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。

       (5) 如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。

       (6) 如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿、下降沿或者双沿触发也可以选择。

       第3步:如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。

       第4步:输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。

       第5步:输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。

       另外注意下面三个问题:

       .5 总结

       本章节就为大家讲解这么多,建议大家将GPIO的驱动源码结合参考手册中的寄存器通读一遍,对于我们后面章节的学习大有裨益。

单片机c语言编程

       问题在变量申明,修改为:

#include "reg.h"

       typedef unsigned char u8;

       typedef unsigned int u;

       sbit LSA=P2^2;

       sbit LSB=P2^3;

       sbit LSC=P2^4;

       sfr GPIO_KEY=0x;

       sfr GPIO_DIG=0x;

       u KeyValue;

       u8 code smgduan[]={ 0x3f,0x,0x5b,0x4f,

       0x,0x6d,0x7d,0x,0x7f,0x6f,0x,0x7c,0x,0x5e,0x,0x};

       void delay(u i)

       {

       while(i--);

       }

       void KeyDown()

       {

       u8 a=0;

       GPIO_KEY=0x0f;

       if(GPIO_KEY!=0x0f)

       {

       delay();

       if(GPIO_KEY!=0x0f)

       {

       GPIO_KEY=0x0f;

       switch(GPIO_KEY)

       {

       case(0x):KeyValue=0;break;

       case(0x0b):KeyValue=1;break;

       case(0x0d):KeyValue=2;break;

       case(0x0e):KeyValue=3;break;

       }

       GPIO_KEY=0xf0;

       switch(GPIO_KEY)

       {

       case(0x):KeyValue=KeyValue;break;

       case(0xb0):KeyValue=KeyValue+4;break;

       case(0xd0):KeyValue=KeyValue+8;break;

       case(0xe0):KeyValue=KeyValue+;break;

       }

       while((a<)&&(GPIO_KEY!=0xf0))

       {

       delay();

       a++;

       }

       }

       }

       }

       void main()

       {  

       LSA=0;

       LSB=0;

       LSC=0;

       while(1)

       {

       KeyDown();

       GPIO_DIG=smgduan[KeyValue]; 

       }

       }

STM8库函数开发手册(1) //工程模板、GPIO、时钟

       深入探索STM8库函数开发:工程模板、GPIO与时钟控制

       在STM8微控制器开发之旅中,库函数是实现硬件操控的关键组件。本文将逐步指导你创建一个功能完备的STM8工程,并详细解读GPIO和时钟控制的库函数操作。跟随以下步骤,让我们的代码更高效、更灵活。

       首先,你需要准备一个整洁的项目结构,包括BSP(板级支持包)、IAR集成开发环境、LIB(库文件)、USR(用户程序和头文件)以及一个Readme文件,用于记录项目信息。

       1. 初始化工程

        - 在LIB文件夹中,复制STM8官方库函数,包括inc和src子目录。

        - 将STM8中断入口文件stm8s_it.c和stm8s_it.h移动到USR,它们是中断处理的核心组件。

        - 将stm8s_conf.h添加到LIB,作为功能库的配置头文件。

       2. 配置IAR工程

        - 在IAR中,新建项目并添加stm8s_it.c和stm8s_conf.h。配置工程设置,确保正确引用库文件和设置编译目录。

       3. 编写基础代码

        - 在main.c文件中,包含stm8.h并指定目标芯片。接着,编写断言函数,以增强代码的健壮性。

       4. GPIO管理

        - GPIO_Init(GPIOx, GPIO_Pin, GPIO_Mode):初始化GPIO引脚的模式。

        - GPIO_DeInit(GPIOx):复位GPIO,释放资源。

        - GPIO_Write(GPIOx, PortVal):按组设置GPIO输出值。

        - GPIO_WriteHigh(GPIOx, PortPins):设置GPIO高电平。

        - GPIO_WriteLow(GPIOx, PortPins):设置GPIO低电平。

        - GPIO_ReadInputData(GPIOx):读取GPIO输入值。

        - GPIO_ReadOutputData(GPIOx):获取GPIO输出状态。

        - GPIO_ReadInputPin(GPIOx, GPIO_Pin):读取单个GPIO引脚状态。

        - GPIO_ExternalPullUpConfig(GPIOx, GPIO_Pin, ENABLE|DISABLE):启用或禁用外部上拉电阻。

       5. 时钟控制的魔法

        - CLK_DeInit():恢复默认时钟设置。

        - CLK_HSECmd(ENABLE|DISABLE):控制HSI外部时钟源。

        - CLK_HSICmd(ENABLE|DISABLE):启用或关闭HSI内部时钟。

        - CLK_LSICmd(ENABLE|DISABLE):控制LSI低速内部时钟。

        - CLK_CCOCmd(ENABLE|DISABLE):控制时钟输出源。

        - CLK_ClockSwitchCmd(ENABLE|DISABLE):切换时钟源。

        - 时钟安全系统相关函数:CLK_ClockSecuritySystemEnable。

        - 通过CLK_GetClockFreq获取当前时钟频率,CLK_GetSYSCLKSource获取系统时钟源。

        - CLK_GetFlagStatus和CLK_ClearITPendingBit用于处理时钟中断标志。

       在实际开发中,这些库函数将帮助你灵活控制GPIO和时钟,确保系统稳定运行。记得将自定义功能代码放入BSP文件夹,以保持项目结构清晰。通过细致操作,你的STM8项目将逐步变得强大且高效。