STM8 GPIO 学习(驱动LED、Button)

发布者:精灵宠儿最新更新时间:2020-01-19 来源: eefocus关键字:STM8  GPIO  驱动LED  Button 手机看文章 扫描二维码
随时随地手机看文章

STM8中GPIO寄存器有:输出寄存器(ODR),输入寄存器(IDR),方向寄存器(DDR),控制寄存器1(CR1)和控制寄存器2(CR2).后面三个寄存器组和可以配置为8种GPIO的模式


定义如下:


/**

  * @brief General Purpose I/Os (GPIO)

  */

typedef struct GPIO_struct

{

  __IO uint8_t ODR; /*!< Output Data Register */

  __IO uint8_t IDR; /*!< Input Data Register */

  __IO uint8_t DDR; /*!< Data Direction Register */

  __IO uint8_t CR1; /*!< Configuration Register 1 */

  __IO uint8_t CR2; /*!< Configuration Register 2 */

}

GPIO_TypeDef;


相关的配置模式定义如下


/**

  * @defgroup GPIO_Modes

  *

  * @brief

  *     

  * Bits definitions:

  * - Bit 7: 0 = INPUT mode

  *          1 = OUTPUT mode

  *          1 = PULL-UP (input) or PUSH-PULL (output)

  * - Bit 5: 0 = No external interrupt (input) or No slope control (output)

  *          1 = External interrupt (input) or Slow control enabled (output)

  * - Bit 4: 0 = Low level (output)

  *          1 = High level (output push-pull) or HI-Z (output open-drain)

  * @{

  */

typedef enum

{

  GPIO_Mode_In_FL_No_IT      = (uint8_t)0x00,   /*!< Input floating, no external interrupt */

  GPIO_Mode_In_PU_No_IT      = (uint8_t)0x40,   /*!< Input pull-up, no external interrupt */

  GPIO_Mode_In_FL_IT         = (uint8_t)0x20,   /*!< Input floating, external interrupt */

  GPIO_Mode_In_PU_IT         = (uint8_t)0x60,   /*!< Input pull-up, external interrupt */

  GPIO_Mode_Out_OD_Low_Fast  = (uint8_t)0xA0,   /*!< Output open-drain, low level, 10MHz */

  GPIO_Mode_Out_PP_Low_Fast  = (uint8_t)0xE0,   /*!< Output push-pull, low level, 10MHz */

  GPIO_Mode_Out_OD_Low_Slow  = (uint8_t)0x80,   /*!< Output open-drain, low level, 2MHz */

  GPIO_Mode_Out_PP_Low_Slow  = (uint8_t)0xC0,   /*!< Output push-pull, low level, 2MHz */

  GPIO_Mode_Out_OD_HiZ_Fast  = (uint8_t)0xB0,   /*!< Output open-drain, high-impedance level, 10MHz */

  GPIO_Mode_Out_PP_High_Fast = (uint8_t)0xF0,   /*!< Output push-pull, high level, 10MHz */

  GPIO_Mode_Out_OD_HiZ_Slow  = (uint8_t)0x90,   /*!< Output open-drain, high-impedance level, 2MHz */

  GPIO_Mode_Out_PP_High_Slow = (uint8_t)0xD0    /*!< Output push-pull, high level, 2MHz */

}GPIO_Mode_TypeDef;




GPIO_Mode_In_FL_No_IT浮空输入无中断

Input floating, no external interrupt

GPIO_Mode_In_PU_No_I上拉输入无中断

Input pull-up, no external interrupt

GPIO_Mode_In_FL_IT 浮空输入有中断

Input floating, external interrupt

GPIO_Mode_In_PU_IT 上拉输入有中断

Input pull-up, external interrupt

GPIO_Mode_Out_OD_Low_Fast 

开漏-输出低-高速

Output open-drain, low level, 10MHz

GPIO_Mode_Out_PP_Low_Fast 

推挽-输出低-高速

Output push-pull, low level, 10MHz

GPIO_Mode_Out_OD_Low_Slow 

开漏-输出低-低速

Output open-drain, low level, 2MHz

GPIO_Mode_Out_PP_Low_Slow 

推挽-输出低-低速

Output push-pull, low level, 2MHz

GPIO_Mode_Out_OD_HiZ_Fast 

开漏-输出高阻-高速

Output open-drain, high-impedance level, 10MHz

GPIO_Mode_Out_PP_High_Fast 

推挽-输出高-高速

Output push-pull, high level, 10MHz

GPIO_Mode_Out_OD_HiZ_Slow 

开漏-输出高阻-低速

Output open-drain, high-impedance level, 2MHz

GPIO_Mode_Out_PP_High_Slow 

推挽-输出高-低速


GPIO的固件库函数如下所示:


 void GPIO_DeInit (GPIO_TypeDef *GPIOx) Deinitializes the GPIOx peripheral registers to their default reset values.

void GPIO_ExternalPullUpConfig (GPIO_TypeDef *GPIOx,uint8_t GPIO_Pin, FunctionalState NewState) Configures the external pull-up on GPIOx pins.

void GPIO_Init (GPIO_TypeDef *GPIOx,uint8_t GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode) Initializes the GPIOx according to the specified parameters.

uint8_t GPIO_ReadInputData (GPIO_TypeDef *GPIOx) Reads the specified GPIO input data port.

BitStatus GPIO_ReadInputDataBit (GPIO_TypeDef *GPIOx,GPIO_Pin_TypeDef GPIO_Pin) Reads the specified GPIO input data pin.

uint8_t GPIO_ReadOutputData (GPIO_TypeDef *GPIOx) Reads the specified GPIO output data port.

BitStatus GPIO_ReadOutputDataBit (GPIO_TypeDef *GPIOx,GPIO_Pin_TypeDef GPIO_Pin) Reads the specified GPIO Output data pin.

void GPIO_ResetBits (GPIO_TypeDef *GPIOx,uint8_t GPIO_Pin) Writes low level to the specified GPIO pins.

void GPIO_SetBits (GPIO_TypeDef *GPIOx,uint8_t GPIO_Pin) Writes high level to the specified GPIO pins.

void GPIO_ToggleBits (GPIO_TypeDef *GPIOx,uint8_t GPIO_Pin) Toggles the specified GPIO pins. 

void GPIO_Write (GPIO_TypeDef *GPIOx,uint8_t GPIO_PortVal) Writes data to the specified GPIO data port.

void GPIO_WriteBit (GPIO_TypeDef *GPIOx,GPIO_Pin_TypeDef GPIO_Pin, BitAction GPIO_BitVal) Sets or clears the selected data port bit. 




下面是GPIO操作的应用,GPIO写操作---板上的两个LED灯闪烁的代码




/**

  ******************************************************************************

  * @file    Project/Template/main.c

  * @author  MCD Application Team

  * @version V1.3.0

  * @date    07/14/2010

  * @brief   Main program body

  ******************************************************************************

  * @copy

  *

  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

  * WITH CODING INFORMATION REGARDIN THEIR PRODUCTS IN ORDER FOR THEM TO SAVE

  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY

  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING

  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE

  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

  *

  *

© COPYRIGHT 2010 STMicroelectronics

  */ 


/* Includes ------------------------------------------------------------------*/

#include "stm8l15x.h"



/** @addtogroup Template

  * @{

  */



/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/



/* Private functions ---------------------------------------------------------*/



/**

  * @brief  Main program.

  * @param  None

  * @retval None

  */



/*discover_board  MACROs for SET, RESET or TOGGLE Output port */

#define GPIO_HIGH(a,b) a->ODR|=b

#define GPIO_LOW(a,b) a->ODR&=~b

#define GPIO_TOGGLE(a,b) a->ODR^=b



#define BUTTON_GPIO_PORT GPIOC

#define USER_GPIO_PIN GPIO_Pin_1



#define LED_GREEN_PORT GPIOE

#define LED_GREEN_PIN GPIO_Pin_7

  

#define LED_BLUE_PORT GPIOC

#define LED_BLUE_PIN            GPIO_Pin_7



#define CTN_GPIO_PORT           GPIOC

#define CTN_CNTEN_GPIO_PIN      GPIO_Pin_4



#define WAKEUP_GPIO_PORT        GPIOE

#define ICC_WAKEUP_GPIO_PIN     GPIO_Pin_6

#define ICC_WAKEUP_EXTI_PIN     EXTI_Pin_3

void Delay(__IO uint16_t nCount)

{

   /* Decrement nCount value */

   while (nCount != 0)

   {

    nCount--;

   } 

}



void main(void)

{

  /* Infinite loop */

  GPIO_Init(LED_GREEN_PORT, LED_GREEN_PIN, GPIO_Mode_Out_PP_Low_Fast);

  GPIO_Init(LED_BLUE_PORT, LED_BLUE_PIN, GPIO_Mode_Out_PP_Low_Fast);

  while (1)

  {

    GPIO_ToggleBits(LED_GREEN_PORT, LED_GREEN_PIN);

    Delay(0xFFFF);

    GPIO_ToggleBits(LED_BLUE_PORT, LED_BLUE_PIN);

    Delay(0xFFFF);

  }

}



/**

  * @brief  Inserts a delay time.

  * @param  nCount: specifies the delay time length.

  * @retval None

  */



#ifdef  USE_FULL_ASSERT



/**

  * @brief  Reports the name of the source file and the source line number

  *   where the assert_param error has occurred.

  * @param  file: pointer to the source file name

  * @param  line: assert_param error line source number

  * @retval None

  */

void assert_failed(uint8_t* file, uint32_t line)

  /* User can add his own implementation to report the file name and line number,

     ex: printf("Wrong parameters value: file %s on line %drn", file, line) */



  /* Infinite loop */

  while (1)

  {

  }

}

#endif



/**

  * @}

  */



/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/

关键字:STM8  GPIO  驱动LED  Button 引用地址:STM8 GPIO 学习(驱动LED、Button)

上一篇:STM8单片机STVD环境新建工程笔记
下一篇:stm8s: GPIO配置,点亮LED!PB4,PB5引脚LED点不亮

推荐阅读最新更新时间:2024-11-09 16:29

STM8 ADC转换模式-------连续扫描模式
STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。 连续扫描模式 该模式和单次扫描模式相近,只是每一次在最后通道转换完成时,一次新的从通道0到通道n扫描转换会自动开始。如果某个数据缓存寄存器在被读走之前被覆盖,OVR标志将置1。 连续扫描模式是在当SCAN位和CONT位已被置时,通过置位ADON位来启动的。 在转换序列正在进行过程中不要清零SCAN位。 连续扫描模式可以通过清零ADON位来立即停止。另外一种选择就是当转换过程中清除CONT位那么转换会在下一次的最后一个通道转换完成时停止。 注意:在扫描模式中,不要使用
[单片机]
STM32学习笔记(三)------GPIO口寄存器的操作与使用
1、STM32 的每个 IO 端口都有 7 个寄存器来控制 (1)配置模式的 2 个 32 位的端口 配置寄存器 CRL 和 CRH (2)2 个 32 位的数据寄存器 IDR 和 ODR (3)1 个 32 位的置位/复位寄存器 BSRR (4)一个 16 位的复位寄存器 BRR (5)1 个 32 位的锁存寄存器 LCKR。 2、每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个
[单片机]
STM32的GPIO工作方式与基本结构
GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚,比如串口。相关文章:学习STM32单片机,绕不开的串口。 GPIO基本结构 每个GPIO
[单片机]
STM32的<font color='red'>GPIO</font>工作方式与基本结构
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
一、前面的工作: (1)从头移植3.4.2内核,修改分区,制作jffs2文件系统 http://blog.csdn.net/fengyuwuzu0519/article/details/69802922 (2)修改内核支持yffs2、制作yffs2文件系统、内核裁剪、制作补丁 http://blog.csdn.net/fengyuwuzu0519/article/details/70162666 (3)移植内核支持DM9000C网卡驱动(可以使用mount nfs)、支持三路串口 http://blog.csdn.net/fengyuwuzu0519/article/details/72846205 到此我
[单片机]
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持<font color='red'>LED</font><font color='red'>驱动</font>、按键<font color='red'>驱动</font>
MSP430单片机的LED驱动电路原理解析
MSP430系列单片机以低功耗和外设模块的丰富性而著称,而针对电容触摸应用,MSP430的PIN RO 电容触摸检测方式支持IO口直接连接检测电极,不需要任何外围器件,极大的简化了电路设计,而本设计文档中使用的MSP430G2XX5 更支持多达2个IO口,可驱动24个以上的LED灯,达到理想的显示效果。 电容触摸实现原理 MSP430根据型号的不同支持多种电容触摸检测方式,有RC 震荡、比较器、PIN RO,本设计使用的是PIN Relaxation Oscillator 方式,原理如图1,芯片管脚内部检测电路由施密特触发器、反向器,以及一个电阻组成,震荡信号经过施密特触发器变成脉冲信号,再通过反向器反馈回RC 电路,通过TI
[单片机]
MSP430单片机的<font color='red'>LED</font><font color='red'>驱动</font>电路原理解析
STM32_GPIO
一、GPIO功能 1、输入浮空模式 浮空输入状态下,STM32读到的电平只根据IO端口的电平有关,如果不连接确定电平负载该引脚的电压也是不确定的 2、输入上拉模式 开启上拉时引脚默认电压为高电平,开启下拉时引脚默认电压是低电平 3、输入下拉模式 开启上拉时引脚默认电压为高电平,开启下拉时引脚默认电压是低电平 4、模拟输入模式 GPIO的引脚用于ADC电压采集的输入通道时,需要将GPIO设置为模拟输入模式 注意:除ADC和DAC要将IO配置为模拟通道其他外设功能一律要将IO配置为复用功能模式 5、开漏输出模式 如果微控制器要输出0,可以从IO口直接输出低电平,但如果微控制器想控制要输出1,那么如果电路上没有额外加
[单片机]
STM32_<font color='red'>GPIO</font>口
ARM--GPIO端口
s3c2440共有130个GPIO端口,分为9组,GPA ~ GPJ,通过寄存器控制。 控制s3c2440的GPIO端口的寄存器有3类,分别是GPxCON、GPxDAT、GPxUP (x=A ~ J): GPxCON:GPIO控制寄存器,可以设置选定GPIO口的输入输出方式和功能。GPA组的23个端口比较特殊,只能是输出方式。GPACON的每一位对应一个引脚,当某位为0时,对应引脚为输出端口,否则为复用功能。 GPB ~ GPJ端口的GPxCON寄存器使用方法一致,每两位控制一个引脚,00时为输入I/O口,01时为输出I/O口,10时为复用功能,11保留。 GPxDAT:此引脚用于读写引脚的状态,即端口数据。当引脚配置
[单片机]
STM8 时钟切换
HSE、HSI、LSI 都可以作为系统主时钟源,STM8 单片机复位以后默认 HSI 的 8 分频作为系统主时钟,其原因是 HSI 稳定时间短,而其 8 分频又可以保证系统在较差的 VDD 条件下安全启动。在系统运行的过程中可以切换系统的主时钟源。系统时钟源的切换有 2 种方式:自动切换、手动切换。 自动切换可以使用最少的指令来完成主时钟源的切换,用户程序可以处理其他事物而不用关心确切的切换时间;手动切换在硬件准备好之后不立即切换,允许用户精确的控制切换发生的时间。 自动切换的步骤为: 1.设置切换控制寄存器 CLK_SWCR 中的 SWEN 位,使能时钟切换。 2.设置主时钟切换寄存器 CLK_SWR,选择目标时钟源
[单片机]
<font color='red'>STM8</font> 时钟切换
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved