STM8 GPIO 学习(驱动LED、Button)
来源:互联网 发布:手机淘宝店铺公告 编辑:程序博客网 时间:2024/05/16 19:21
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.
*
* <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
*/
/* 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 %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/**
* @}
*/
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
- STM8 GPIO 学习(驱动LED、Button)
- STM8的GPIO驱动
- S3C6410 GPIO 驱动(二) --- LED驱动
- AndroidThings学习笔记--gpio控制Led和Button
- STM8 入门学习与实验(一)GPIO与UART
- Windows CE GPIO/LED驱动
- cubieboard2使用GPIO驱动LED
- STM8->GPIO
- GPIO(led灯)驱动和测试程序
- Android GPIO LED 驱动与HAL分析(转)
- STM8 LED
- STM8库函数学习笔记之GPIO
- s3c2440-gpio-button(keyboard)驱动
- S3C6410 GPIO 驱动(三) ---LED应用程序--实现关闭或打开指定LED灯
- Android GPIO LED 驱动与HAL分析
- Android GPIO LED 驱动与HAL分析
- Android GPIO LED 驱动与HAL分析
- Android GPIO LED 驱动与HAL分析
- 习题6.7
- 分享20个Android游戏源码,希望大家喜欢哈!
- 习题6.8,习题6.9,习题6.10 习题6.14
- linux 2.6.32 i2c_transfer
- dom4j学习总结
- STM8 GPIO 学习(驱动LED、Button)
- 在Keil4中建立基于V3.4.0固件库的STM32工程(转)
- 右栏固定,左栏自适应宽度且先出现的一种实现方案
- 嵌入式笔记-----------LInux根文件系统的制作和nfs挂载制作好的根文件系统
- 文件I/O
- Jquery 的选择器详解
- 关于memset和memcpy的使用,尤其对结构体进行初始化和拷贝的问题
- C++中的引用
- WPF绑定ListBox