1、stm8s函数库应用笔记版1.STM8库函数学习笔记之GPIO上拉输入模式:区别在于没有输入信号的时候默认输入高电平(因为有弱上拉)。下拉输入模式:区别在于没有输入信号的时候默认输入低电平(因为有弱下拉)。浮空输入模式:顾名思义也就是输入什么信号才是什么信号,对于浮空输入要保证有明确的输入信号。推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 开漏是没有驱动能力的,高电平就相当于一个很大阻抗。你要用真开漏的引脚驱动芯片,要做上拉 注意GPIO硬件模块内部是否
2、有上拉电阻,如果没有,需要硬件电路上添加额外的上拉电阻 开漏Pin不连接外部的上拉电阻,则只能输出低电平开漏输出好处1:可以将多个开漏输出的Pin,连接到一条线上。形成 “与逻辑” 关系。 这也是I2C,SMBus等总线判断总线占用状态的原理。开漏输出好处2:可以利用改变上拉电源的电压,改变传输电平。如图2, IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。相关的函数:void GPIO_DeInit(GPIO_TypeDef* GPIOx);void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin
3、_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);void GPIO_Write(GPIO_TypeDef* GPIOx, u8 PortVal);void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPin
4、s);u8 GPIO_ReadInputData(GPIO_TypeDef* GPIOx);u8 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState);/-void GPIO_DeInit(GPIO_TypeD
5、ef* GPIOx);这个函数用來恢復指定端口的寄存器ODR、DDR、CR1及CR2到默認值0x00,即无中断功能的浮动輸入,无返回值。参数:GPIOx: GPIOA到GPIOI可选。示例: 恢復GPIOB的相應寄存器为默認值GPIO_DeInit(GPIOB);/-void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);这个函数用來配置指定端口的各个引脚功能,无返回值。参数: GPIOx: 端口GPIOA到GPIOI可选。GPIO_Pin: 要初始化的引脚,可以用“
6、或”方式选择多个引脚,可选值:GPIO_PIN_0 选择 0 引脚GPIO_PIN_1 选择 1 引脚GPIO_PIN_2 选择 2 引脚GPIO_PIN_3 选择 3 引脚GPIO_PIN_4 选择 4 引脚GPIO_PIN_5 选择 5 引脚GPIO_PIN_6 选择 6 引脚GPIO_PIN_7 选择 7 引脚GPIO_PIN_LNIB 低四位引脚选择,即同時选择PIN_0到PIN_3。GPIO_PIN_HNIB 高四位引脚选择,即同時选择PIN_4到PIN_7。GPIO_PIN_ALL 选择全部引脚,即同時选择PIN_0到PIN_7。GPIO_Mode:工作模式。可选值:GPIO_MO
7、DE_IN_FL_NO_IT 无中断功能的浮动輸入。GPIO_MODE_IN_PU_NO_IT 无中断功能的上拉輸入。GPIO_MODE_IN_FL_IT 帶中断功能的浮动輸入。GPIO_MODE_IN_PU_IT 帶中断功能的上拉輸入。GPIO_MODE_OUT_OD_LOW_FAST 高速开漏低电平輸出,可工作到10MHz。GPIO_MODE_OUT_PP_LOW_FAST 高速推挽低电平輸出,可工作到10MHz。GPIO_MODE_OUT_OD_LOW_SLOW 低速开漏低电平輸出,可工作到2MHz。GPIO_MODE_OUT_PP_LOW_SLOW 低速推挽低电平輸出,可工作到2MHz
8、。GPIO_MODE_OUT_OD_HIZ_FAST 高速开漏高阻態輸出,可工作到10MHz。GPIO_MODE_OUT_PP_HIGH_FAST 高速推挽高电平輸出,可工作到10MHz。GPIO_MODE_OUT_OD_HIZ_SLOW 低速开漏高阻態輸出,可工作到2MHz。GPIO_MODE_OUT_PP_HIGH_SLOW 低速推挽高电平輸出,可工作到2MHz。示例: 把GPIOB的引脚0、1、4配置为高速推挽高电平輸出。GPIO_Init(GPIOB, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4), GPIO_MODE_OUT_PP_HIGH_FAST)
9、;/-void GPIO_Write(GPIO_TypeDef* GPIOx, u8 PortVal);这个函数用來輸出一个八位的值到指定的端口,无返回值。所需条件:该端口必须配置为输出模式。参数:GPIOx:端口GPIOA到GPIOI可选。PortVal:为无符号8位數值。示例: 端口B輸出0x22。GPIO_Write(GPIOB, 0x22);/-void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);这个函数用來置位指定端口的一个或多个引脚,即置相應引脚輸出为高电平,无返回值。所需条件:该端口必须配置为输出
10、模式。参数:GPIOx:端口GPIOA到GPIOI可选。PortPins: 要置位引脚,可以用“或”方式选择多个引脚,可选值:GPIO_PIN_0 选择 0 引脚GPIO_PIN_1 选择 1 引脚GPIO_PIN_2 选择 2 引脚GPIO_PIN_3 选择 3 引脚GPIO_PIN_4 选择 4 引脚GPIO_PIN_5 选择 5 引脚GPIO_PIN_6 选择 6 引脚GPIO_PIN_7 选择 7 引脚GPIO_PIN_LNIB 低四位引脚选择,即同時选择PIN_0到PIN_3。GPIO_PIN_HNIB 高四位引脚选择,即同時选择PIN_4到PIN_7。GPIO_PIN_ALL 选择
11、全部引脚,即同時选择PIN_0到PIN_7。示例: 把GPIOB的引脚0和引脚3置位。GPIO_WriteHigh(GPIOB, (GPIO_PIN_0 | GPIO_PIN_3);/-void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);这个函数用來復位指定端口一个或多个引脚的电平,即置相應引脚輸出为低电平,无返回值。所需条件:该端口必须配置为输出模式。参数:GPIOx:端口GPIOA到GPIOI可选。PortPins: 要復位引脚,可以用“或”方式选择多个引脚,可选值:GPIO_PIN_0 选择 0 引脚GPI
12、O_PIN_1 选择 1 引脚GPIO_PIN_2 选择 2 引脚GPIO_PIN_3 选择 3 引脚GPIO_PIN_4 选择 4 引脚GPIO_PIN_5 选择 5 引脚GPIO_PIN_6 选择 6 引脚GPIO_PIN_7 选择 7 引脚GPIO_PIN_LNIB 低四位引脚选择,即同時选择PIN_0到PIN_3。GPIO_PIN_HNIB 高四位引脚选择,即同時选择PIN_4到PIN_7。GPIO_PIN_ALL 选择全部引脚,即同時选择PIN_0到PIN_7。示例: 把GPIOB的引脚0和引脚3置为低电平。GPIO_WriteLow(GPIOB, (GPIO_PIN_0 | GPI
13、O_PIN_3);/-void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);这个函数用來取反指定端口的一个或多个引脚的电平状态,如果當前該引脚为高电平則置为低电平,如果为低电平則置为高电平,无返回值。所需条件:该端口必须配置为输出模式。参数:GPIOx:端口GPIOA到GPIOI可选。PortPins: 要取反的引脚,可以用“或”方式选择多个引脚。可选值:GPIO_PIN_0 选择 0 引脚GPIO_PIN_1 选择 1 引脚GPIO_PIN_2 选择 2 引脚GPIO_PIN_3 选择 3 引脚GPIO_
14、PIN_4 选择 4 引脚GPIO_PIN_5 选择 5 引脚GPIO_PIN_6 选择 6 引脚GPIO_PIN_7 选择 7 引脚GPIO_PIN_LNIB 低四位引脚选择,即同時选择PIN_0到PIN_3。GPIO_PIN_HNIB 高四位引脚选择,即同時选择PIN_4到PIN_7。GPIO_PIN_ALL 选择全部引脚,即同時选择PIN_0到PIN_7。示例: 取反GPIOB的引脚0和引脚3的电平状态。GPIO_WriteReverse(GPIOB, (GPIO_PIN_0 | GPIO_PIN_3);/-u8 GPIO_ReadInputData(GPIO_TypeDef* GPIO
15、x);这个函数用來读取指定端口的数据,返回一个八位无符号值。所需条件:该端口必须配置为输入模式。参数:GPIOx:端口GPIOA到GPIOI可选。示例:读取端口A的數值。u8 r_data;r_data = GPIO_ReadInputData(GPIOA);/-u8 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);这个函数用來读取指定端口的輸出寄存器的数据,返回一个八位无符号值。参数:GPIOx:端口GPIOA到GPIOI可选。示例:读取端口A的輸出寄存器的數值。u8 r_data;r_data = GPIO_ReadOutputData(GPIOA);/-
16、BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);这个函数用來读取指定端口一个或多个引脚状态,任意一个引脚为高电平側返回SET,否則返回RESET。所需条件:该端口必须配置为输入模式。参数:GPIOx:端口GPIOA到GPIOI可选。GPIO_Pin: 要读取状态的引脚,可以用“或”方式选择多个引脚,可选值:GPIO_PIN_0 选择 0 引脚GPIO_PIN_1 选择 1 引脚GPIO_PIN_2 选择 2 引脚GPIO_PIN_3 选择 3 引脚GPIO_PIN_4 选择 4 引脚GPIO
17、_PIN_5 选择 5 引脚GPIO_PIN_6 选择 6 引脚GPIO_PIN_7 选择 7 引脚GPIO_PIN_LNIB 低四位引脚选择,即同時选择PIN_0到PIN_3。GPIO_PIN_HNIB 高四位引脚选择,即同時选择PIN_4到PIN_7。GPIO_PIN_ALL 选择全部引脚,即同時选择PIN_0到PIN_7。示例: 读取GPIOB引脚1的电平状态。GPIO_ReadInputPin(GPIOB, GPIO_PIN_1);/-void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pi
18、n, FunctionalState NewState);这个函数用來使能或禁止指定端口某一个或多个引脚的內部上拉電阻,无返回值。参数:GPIOx:端口GPIOA到GPIOI可选。GPIO_Pin: 要使能或禁止內部上拉電阻的引脚,可以用“或”方式选择多个引脚,可选值:GPIO_PIN_0 选择 0 引脚GPIO_PIN_1 选择 1 引脚GPIO_PIN_2 选择 2 引脚GPIO_PIN_3 选择 3 引脚GPIO_PIN_4 选择 4 引脚GPIO_PIN_5 选择 5 引脚GPIO_PIN_6 选择 6 引脚GPIO_PIN_7 选择 7 引脚GPIO_PIN_LNIB 低四位引脚选择
19、,即同時选择PIN_0到PIN_3。GPIO_PIN_HNIB 高四位引脚选择,即同時选择PIN_4到PIN_7。GPIO_PIN_ALL 选择全部引脚,即同時选择PIN_0到PIN_7。示例:禁止和使能端口GPIOB引脚0的上拉電阻。如果該引脚原为推挽輸出,那么禁止后就变为开漏輸出。如果該引脚原來上拉輸入,那么禁止后就变为浮动輸入。如果該引脚原为开漏輸出,那么使能后就变为推挽輸出。如果該引脚原來浮动輸入,那么使能后就变为上拉輸入。(1)GPIO_ExternalPullUpConfig(GPIOB, GPIO_PIN_0, DISABLE); /禁止內部上拉電阻。(2)GPIO_Extern
20、alPullUpConfig(GPIOB, GPIO_PIN_0, ENABLE); /使能內部上拉電阻。/-分享到:2.STM8库函数学习笔记之时钟管理用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。下面4种时钟源可用做主时钟: 1-24MHz高速外部晶体振荡器(HSE) 最大24MHz高速外部时钟信号(HSE user-ext) 16MHz高速内部RC振荡器(HSI) 128KHz低速内部RC(LSI)各个时钟源可单独打开或关闭,从而优化功耗。相关函数:vo
21、id CLK_DeInit(void);void CLK_HSECmd(FunctionalState NewState);void CLK_HSICmd(FunctionalState NewState);void CLK_LSICmd(FunctionalState NewState);void CLK_CCOCmd(FunctionalState NewState);void CLK_ClockSwitchCmd(FunctionalState NewState);void CLK_FastHaltWakeUpCmd(FunctionalState NewState);void CLK_
22、SlowActiveHaltWakeUpCmd(FunctionalState NewState);void CLK_PeripheralClockConfig(CLK_Peripheral_TypeDef CLK_Peripheral, FunctionalState NewState);ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode, CLK_Source_TypeDef CLK_NewClock, FunctionalStateITState, CLK_CurrentClockState_Ty
23、peDef CLK_CurrentClockState);void CLK_HSIPrescalerConfig(CLK_Prescaler_TypeDef HSIPrescaler);void CLK_CCOConfig(CLK_Output_TypeDef CLK_CCO);void CLK_ITConfig(CLK_IT_TypeDef CLK_IT, FunctionalState NewState);void CLK_SYSCLKConfig(CLK_Prescaler_TypeDef CLK_Prescaler);void CLK_SWIMConfig(CLK_SWIMDivide
24、r_TypeDef CLK_SWIMDivider);void CLK_CANConfig(CLK_CANDivider_TypeDef CLK_CANDivider);void CLK_ClockSecuritySystemEnable(void);void CLK_SYSCLKEmergencyClear(void);void CLK_AdjustHSICalibrationValue(CLK_HSITrimValue_TypeDef CLK_HSICalibrationValue);u32 CLK_GetClockFreq(void);CLK_Source_TypeDef CLK_Get
25、SYSCLKSource(void);FlagStatus CLK_GetFlagStatus(CLK_Flag_TypeDef CLK_FLAG);ITStatus CLK_GetITStatus(CLK_IT_TypeDef CLK_IT);void CLK_ClearITPendingBit(CLK_IT_TypeDef CLK_IT);/-void CLK_DeInit(void);恢复相关的时钟寄存器到默认值参数:无返回值:无注意:当要复位CCOR寄存器时,如果CCOEN位被置位,则需要先复位CCOEN位,然后再复位CCOSEL位,复位CCOEN位和复位CCOSEL位的操作必须连续。
26、这个理解不知对不对,是根据库函数的帮助来理解的,但测试结果,无论CCOEN是否置位,调用后都能恢复CCOR寄存器。/-void CLK_HSECmd(FunctionalState NewState);启用或禁用外部高速振荡器(HSE)参数:NewState: 新的状态值DISABLE 禁用ENABLE 启用返回值:无/-void CLK_HSICmd(FunctionalState NewState);启用或禁用内部高速振荡器(HSI 16MHz)参数:NewState: 新的状态值DISABLE 禁用ENABLE 启用返回值:无/-void CLK_LSICmd(FunctionalState NewState);启用或禁用内部低速振荡器(LSI 128KHz)参数:NewState: 新的状态值DISABLE 禁用ENABLE 启用返回值:无/-void CLK_CCOCmd(FunctionalState NewState);启用或禁用可配置的时钟输出功能参数:NewState: 新的状态值DISABLE 禁用ENABLE 启用返回值:无/-