stm8s函数库应用笔记版.docx
- 文档编号:3899160
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:27
- 大小:26.58KB
stm8s函数库应用笔记版.docx
《stm8s函数库应用笔记版.docx》由会员分享,可在线阅读,更多相关《stm8s函数库应用笔记版.docx(27页珍藏版)》请在冰点文库上搜索。
stm8s函数库应用笔记版
1.STM8库函数学习笔记之GPIO
上拉输入模式:
区别在于没有输入信号的时候默认输入高电平(因为有弱上拉)。
下拉输入模式:
区别在于没有输入信号的时候默认输入低电平(因为有弱下拉)。
浮空输入模式:
顾名思义也就是输入什么信号才是什么信号,对于浮空输入要保证有明确的输入信号。
推挽输出:
可以输出高,低电平,连接数字器件;
开漏输出:
输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.
适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).
开漏是没有驱动能力的,高电平就相当于一个很大阻抗。
你要用真开漏的引脚驱动芯片,要做上拉
注意GPIO硬件模块内部是否有上拉电阻,如果没有,需要硬件电路上添加额外的上拉电阻
开漏Pin不连接外部的上拉电阻,则只能输出低电平
开漏输出好处1:
可以将多个开漏输出的Pin,连接到一条线上。
形成“与逻辑”关系。
这也是I2C,SMBus等总线判断总线占用状态的原理。
开漏输出好处2:
可以利用改变上拉电源的电压,改变传输电平。
如图2,IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。
这样我们就可以用低电平逻辑控制输出高电平逻辑了。
相关的函数:
voidGPIO_DeInit(GPIO_TypeDef*GPIOx);
voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefGPIO_Pin,GPIO_Mode_TypeDefGPIO_Mode);
voidGPIO_Write(GPIO_TypeDef*GPIOx,u8PortVal);
voidGPIO_WriteHigh(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefPortPins);
voidGPIO_WriteLow(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefPortPins);
voidGPIO_WriteReverse(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefPortPins);
u8GPIO_ReadInputData(GPIO_TypeDef*GPIOx);
u8GPIO_ReadOutputData(GPIO_TypeDef*GPIOx);
BitStatusGPIO_ReadInputPin(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefGPIO_Pin);
voidGPIO_ExternalPullUpConfig(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefGPIO_Pin,FunctionalStateNewState);
//---------------------------------------------------------------------------------------
voidGPIO_DeInit(GPIO_TypeDef*GPIOx);
这个函数用來恢復指定端口的寄存器ODR、DDR、CR1及CR2到默認值0x00,即无中断功能的浮动輸入,无返回值。
参数:
GPIOx:
GPIOA到GPIOI可选。
示例:
恢復GPIOB的相應寄存器为默認值
GPIO_DeInit(GPIOB);
//---------------------------------------------------------------------------------------
voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefGPIO_Pin,GPIO_Mode_TypeDefGPIO_Mode);
这个函数用來配置指定端口的各个引脚功能,无返回值。
参数:
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低四位引脚选择,即同時选择PIN_0到PIN_3。
GPIO_PIN_HNIB高四位引脚选择,即同時选择PIN_4到PIN_7。
GPIO_PIN_ALL选择全部引脚,即同時选择PIN_0到PIN_7。
GPIO_Mode:
工作模式。
可选值:
GPIO_MODE_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。
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);
//---------------------------------------------------------------------------------------
voidGPIO_Write(GPIO_TypeDef*GPIOx,u8PortVal);
这个函数用來輸出一个八位的值到指定的端口,无返回值。
所需条件:
该端口必须配置为输出模式。
参数:
GPIOx:
端口GPIOA到GPIOI可选。
PortVal:
为无符号8位數值。
示例:
端口B輸出0x22。
GPIO_Write(GPIOB,0x22);
//---------------------------------------------------------------------------------------
voidGPIO_WriteHigh(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefPortPins);
这个函数用來置位指定端口的一个或多个引脚,即置相應引脚輸出为高电平,无返回值。
所需条件:
该端口必须配置为输出模式。
参数:
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选择全部引脚,即同時选择PIN_0到PIN_7。
示例:
把GPIOB的引脚0和引脚3置位。
GPIO_WriteHigh(GPIOB,(GPIO_PIN_0|GPIO_PIN_3));
//---------------------------------------------------------------------------------------
voidGPIO_WriteLow(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefPortPins);
这个函数用來復位指定端口一个或多个引脚的电平,即置相應引脚輸出为低电平,无返回值。
所需条件:
该端口必须配置为输出模式。
参数:
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选择全部引脚,即同時选择PIN_0到PIN_7。
示例:
把GPIOB的引脚0和引脚3置为低电平。
GPIO_WriteLow(GPIOB,(GPIO_PIN_0|GPIO_PIN_3));
//---------------------------------------------------------------------------------------
voidGPIO_WriteReverse(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefPortPins);
这个函数用來取反指定端口的一个或多个引脚的电平状态,如果當前該引脚为高电平則置为低电平,如果为低电平則置为高电平,无返回值。
所需条件:
该端口必须配置为输出模式。
参数:
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选择全部引脚,即同時选择PIN_0到PIN_7。
示例:
取反GPIOB的引脚0和引脚3的电平状态。
GPIO_WriteReverse(GPIOB,(GPIO_PIN_0|GPIO_PIN_3));
//---------------------------------------------------------------------------------------
u8GPIO_ReadInputData(GPIO_TypeDef*GPIOx);
这个函数用來读取指定端口的数据,返回一个八位无符号值。
所需条件:
该端口必须配置为输入模式。
参数:
GPIOx:
端口GPIOA到GPIOI可选。
示例:
读取端口A的數值。
u8r_data;
r_data=GPIO_ReadInputData(GPIOA);
//---------------------------------------------------------------------------------------
u8GPIO_ReadOutputData(GPIO_TypeDef*GPIOx);
这个函数用來读取指定端口的輸出寄存器的数据,返回一个八位无符号值。
参数:
GPIOx:
端口GPIOA到GPIOI可选。
示例:
读取端口A的輸出寄存器的數值。
u8r_data;
r_data=GPIO_ReadOutputData(GPIOA);
//---------------------------------------------------------------------------------------
BitStatusGPIO_ReadInputPin(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefGPIO_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_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);
//---------------------------------------------------------------------------------------
voidGPIO_ExternalPullUpConfig(GPIO_TypeDef*GPIOx,GPIO_Pin_TypeDefGPIO_Pin,FunctionalStateNewState);
这个函数用來使能或禁止指定端口某一个或多个引脚的內部上拉電阻,无返回值。
参数:
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低四位引脚选择,即同時选择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_ExternalPullUpConfig(GPIOB,GPIO_PIN_0,ENABLE);//使能內部上拉電阻。
//---------------------------------------------------------------------------------------
分享到:
2.STM8库函数学习笔记之时钟管理
用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。
主时钟和CPU时钟均带有预
分频器。
具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时
钟源。
下面4种时钟源可用做主时钟:
●1-24MHz高速外部晶体振荡器(HSE)
●最大24MHz高速外部时钟信号(HSEuser-ext)
●16MHz高速内部RC振荡器(HSI)
●128KHz低速内部RC(LSI)
各个时钟源可单独打开或关闭,从而优化功耗。
相关函数:
voidCLK_DeInit(void);
voidCLK_HSECmd(FunctionalStateNewState);
voidCLK_HSICmd(FunctionalStateNewState);
voidCLK_LSICmd(FunctionalStateNewState);
voidCLK_CCOCmd(FunctionalStateNewState);
voidCLK_ClockSwitchCmd(FunctionalStateNewState);
voidCLK_FastHaltWakeUpCmd(FunctionalStateNewState);
voidCLK_SlowActiveHaltWakeUpCmd(FunctionalStateNewState);
voidCLK_PeripheralClockConfig(CLK_Peripheral_TypeDefCLK_Peripheral,FunctionalStateNewState);
ErrorStatusCLK_ClockSwitchConfig(CLK_SwitchMode_TypeDefCLK_SwitchMode,CLK_Source_TypeDefCLK_NewClock,FunctionalState
ITState,CLK_CurrentClockState_TypeDefCLK_CurrentClockState);
voidCLK_HSIPrescalerConfig(CLK_Prescaler_TypeDefHSIPrescaler);
voidCLK_CCOConfig(CLK_Output_TypeDefCLK_CCO);
voidCLK_ITConfig(CLK_IT_TypeDefCLK_IT,FunctionalStateNewState);
voidCLK_SYSCLKConfig(CLK_Prescaler_TypeDefCLK_Prescaler);
voidCLK_SWIMConfig(CLK_SWIMDivider_TypeDefCLK_SWIMDivider);
voidCLK_CANConfig(CLK_CANDivider_TypeDefCLK_CANDivider);
voidCLK_ClockSecuritySystemEnable(void);
voidCLK_SYSCLKEmergencyClear(void);
voidCLK_AdjustHSICalibrationValue(CLK_HSITrimValue_TypeDefCLK_HSICalibrationValue);
u32CLK_GetClockFreq(void);
CLK_Source_TypeDefCLK_GetSYSCLKSource(void);
FlagStatusCLK_GetFlagStatus(CLK_Flag_TypeDefCLK_FLAG);
ITStatusCLK_GetITStatus(CLK_IT_TypeDefCLK_IT);
voidCLK_ClearITPendingBit(CLK_IT_TypeDefCLK_IT);
//-----------------------------------------------------------------------------------------
voidCLK_DeInit(void);
恢复相关的时钟寄存器到默认值
参数:
无
返回值:
无
注意:
当要复位CCOR寄存器时,如果CCOEN位被置位,则需要先复位CCOEN位,然后再复位CCOSEL位,复位CCOEN位和复位CCOSEL位的操作必须连续。
这个理解不知对不对,是根据库函数的帮助来理解的,但测试结果,无论CCOEN是否置位,调用后都能恢复CCOR寄存器。
//-----------------------------------------------------------------------------------------
voidCLK_HSECmd(FunctionalStateNewState);
启用或禁用外部高速振荡器(HSE)
参数:
NewState:
新的状态值
DISABLE禁用
ENABLE启用
返回值:
无
//-----------------------------------------------------------------------------------------
voidCLK_HSICmd(FunctionalStateNewState);
启用或禁用内部高速振荡器(HSI16MHz)
参数:
NewState:
新的状态值
DISABLE禁用
ENABLE启用
返回值:
无
//-----------------------------------------------------------------------------------------
voidCLK_LSICmd(FunctionalStateNewState);
启用或禁用内部低速振荡器(LSI128KHz)
参数:
NewState:
新的状态值
DISABLE禁用
ENABLE启用
返回值:
无
//-----------------------------------------------------------------------------------------
voidCLK_CCOCmd(FunctionalStateNewState);
启用或禁用可配置的时钟输出功能
参数:
NewState:
新的状态值
DISABLE禁用
ENABLE启用
返回值:
无
//-----------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm8s 函数库 应用 笔记