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.
*
*
*/
/* 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****/
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』