STM8库函数开发手册(1) //工程模板、GPIO、时钟

第一部分 创建库函数工程

1、创建文件目录

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第1张图片

BSP文件夹中存放自定义底层驱动程序文件;

IAR文件夹存放IAR工程文件;

LIB 文件夹中引入C 语言自己的库函数;

USR 文件夹中存放自定义主程序及数据库头文件等;

Readme 文件夹中存放自定义程序设计说明文件;

2、将STM8库函数文件拷贝入LIB文件夹

链接:

https://pan.baidu.com/s/1llVx9meEhhk0VYKbsKzLxw

提取码:iy3v

下载解压后进入官方库函数目录:

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第2张图片

打开Libraries\STM8S_StdPeriph_Driver文件夹,找到inc 和src文件夹

就是我们的官方库文件啦

v2-3bb5467cd072f31b265bbb021139381a_b.png

将其拷贝到我们的LIB下:

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第3张图片

inc文件夹是.h文件集合

src文件夹是.c文件集合

3、将STM8中断入口文件拷贝入USR文件夹

STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Template文件夹下拷贝如下文件

v2-50aa5eac21ed74408b0b8418e19dc12f_b.png

将stm8s_it.c、stm8s_it.h拷贝到USR文件夹下

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第4张图片

4、将stm8s_conf.h(目录文件)拷贝到LIB文件夹下

STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Template文件夹下拷贝如下文件

v2-529dab4f0f2d8b746b41c26c440f3656_b.png

将stm8s_conf.h(目录文件)拷贝到LIB文件夹下

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第5张图片

关于stm8s_conf.h的介绍:

stm8s_conf.h是官方固件库头文件的集合,如果不需要某个方面的功能,可以将对应头文件的声明注释掉。

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第6张图片

5、打开IAR新建工程

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第7张图片

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第8张图片

记得把工程放入IAR文件夹下

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第9张图片

6、将工程文件结构与IAR工程结构对应起来

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第10张图片

IAR文件夹是存工程的,不需要添加

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第11张图片

7、往工程树中添加文件

①、往USR中添加stm8s_it.c(不需要添加.h)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第12张图片

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第13张图片

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第14张图片

②、LIB中添加stm8s_conf.h

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第15张图片

8、保存工程到IAR文件夹下

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第16张图片

9、在IAR工程中创建main.c

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第17张图片

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第18张图片

添加入工程中USR树下

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第19张图片

10、创建pbdata.h pbdata.c文件并添加入USR文件夹下

(这两个文件用来存储公共函数)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第20张图片

解决公共调用函数重复调用问题,可以这样定义头文件

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第21张图片

11、配置工程设置

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第22张图片

①、选定MCUi型号

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第23张图片

②、选定调试方式

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第24张图片

③、选定编译输出格式

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第25张图片

④、⭐设置工程调用目录⭐

        $PROJ_DIR$\..\lib\inc
$PROJ_DIR$\..\lib\src
$PROJ_DIR$\..\lib

$PROJ_DIR$\..\usr 

$PROJ_DIR$\..\bsp

$PROJ_DIR$\..\iar

      

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第26张图片

12、在main.c中写main函数

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第27张图片

13、在pbdata.h中包含 stm8.h

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第28张图片

14、在 stm8.h中选中我们用的芯片

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第29张图片

15、尝试编译,至此一个库函数工程已经搭建完成

最终目录如下:

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第30张图片

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第31张图片

16、为了完善工程,我们需要一个断言函数来为程序提供参数检查

        #include "pbdata.h"

int main(void)
{
    //main
}
/*断言函数:它的作用是在编程的过程中为程序提供参数检查*/
#ifdef USE_FULL_ASSERT
void assert_failed(u8* file,u32 line)
{
  while(1)
  {
  }
}
#endif
      

17、其实我们还没有引用官方功能库文件,可以用什么引用什么,引用方法如下:

在LIB里添加对应的库文件的.c文件就可以了

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第32张图片

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第33张图片


18、我们自己写的代码放在哪?

例如我们要写一个led驱动,创建led.h 和led.c文件,然后放入BSP文件夹下,同时将led。c引入工程树下BSP下。

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第34张图片

在led.h中要也要这样定义头文件

        #ifndef _LED_H
#define _LED_H
#include "stm8s.h"

#endif
      

在led.c中引用pbdata.h,而在pbdata.h中引用led.h

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第35张图片

v2-f0c70741f3cc67a3f3211ecf123fccd7_b.jpg

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第36张图片 CSDN-专业IT技术社区-登录

第二部分 GPIO库 (gpio.c)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第37张图片

1、GPIO_Init(GPIOx,GPIO_Pin,GPIO_Mode) // GPIO初始化

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第38张图片

其中GPIO_Pin

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第39张图片

其中GPIO_Mode

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第40张图片
        GPIO_Init(GPIOA, GPIO_PIN_LNIB, GPIO_MODE_IN_FL_NO_IT);
      

2、GPIO_DeInit(GPIOx) //GPIO回复初始状态

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第41张图片

注意:复位状态下,所有的引脚都是悬浮输入模式

        
          GPIO_DeInit
          (
          GPIOA
          );
        
      

3、GPIO_Write(GPIOx,PortVal) //GPIO按组写值

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第42张图片
        GPIO_Write(GPIOA, 0x00);
      

4、GPIO_WriteHigh(GPIOx,PortPins) //GPIO按引脚号写1

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第43张图片
        GPIO_WriteHigh(GPIOA, GPIO_PIN_0);
      

5、GPIO_WriteLow(GPIOx,PortPins) //GPIO按引脚号写0

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第44张图片

6、GPIO_WriteReverse(GPIOx,PortPins)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第45张图片

7、GPIO_ReadInputData(GPIOx) //读取GPIO输入寄存器值

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第46张图片
        u8 port_value;
port_value = GPIO_ReadInputData(GPIOA);
      

8、GPIO_ReadOutputData(GPIOx) //读取GPIO输出寄存器值

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第47张图片
        u8 port_value;
port_value = GPIO_ReadOutputData(GPIOA);
      

9、GPIO_ReadInputPin(GPIOx,GPIO_Pin) //读取GPIO输入寄存器特定引脚位的值

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第48张图片

10、GPIO_ExternalPullUpConfig(GPIOx,GPIO_Pin,NewState)

//设置某引脚使能上拉电阻

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第49张图片

NewState:ENABLE或者DISABLE


第三部分 时钟控制库 (clk.c)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第50张图片

1、CLK_DeInit() //恢复相关的时钟寄存器到默认值

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第51张图片
        
          CLK_DeInit
          ();
        
      

2、CLK_HSECmd(NewState) //启动或者关闭外部高速振荡器(HSE)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第52张图片

NewState:ENABLE或者DISABLE

3. CLK_HSICmd(NewState) //启动或者关闭内部高速振荡器(HSI)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第53张图片

4. CLK_LSICmd(NewState) //启动或者关闭内部低速振荡器(LSI)

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第54张图片

5. CLK_CCOCmd(NewState) //启动或者关闭内部时钟输出功能

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第55张图片

6. CLK_ClockSwitchCmd(NewState) //启动或者关闭内部时钟切换

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第56张图片

7. CLK_FastHaltWakeUpCmd(NewState) //启动或者关闭快速唤醒功能

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第57张图片

8. CLK_SlowActiveHaltWakeUpCmd(NewState) //启动或者关闭活跃停机模式下的电压调节器

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第58张图片

9.CLK_ITConfig(CLK_IT,NewState) //启动或者关闭指定的时钟中断

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第59张图片

其中CLK_IT的取值:

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第60张图片

10. CLK_ClockSwitchConfig(CLK_SwitchMode,CLK_NewClock,ITState,CLK_CurrentClockState) //系统时钟切换配置

v2-ac218822cf4ddf9e606df9d613ae425a_b.png

其中:

CLK_SwitchMode:切换模式(MANUAL和AUTO两种方式)

CLK_NewClock:DISABLE或者ENABLE

ITState:DISABLE或者ENABLE

CLK_CurrentClockState:DISABLE或者ENABLE

11、CLK_HSIPrescalerConfig(HSIPrescaler) //配置内部高速振荡器(HSI)的分频器

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第61张图片

其中:HSIPrescaler取值

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第62张图片

12、CLK_CCOConfig(CLK_CCO) //配置时钟输出脚(CCO)的时钟源

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第63张图片

其中CLK_CCO:

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第64张图片

13、CLK_PeripheralClockConfig(CLK_Peripheral,NewState)

//启动或者关闭指定的外设时钟

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第65张图片

其中CLK_Peripheral取值:

CLK_PERIPHERAL_I2C

CLK_PERIPHERAL_SPI

CLK_PERIPHERAL_UART1 ~3

CLK_PERIPHERAL_TIMER1 ~6

CLK_PERIPHERAL_AWU

CLK_PERIPHERAL_ADC

CLK_PERIPHERAL_CAN

14. CLK_SYSCLKConfig(CLK_Prescaler) //配置系统时钟分频器

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第66张图片

其中CLK_Prescaler的值:

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第67张图片

15、CLK_SWIMConfig(CLK_SWIMDivider) //配置SWIM时钟分频器

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第68张图片

其中:

v2-46643b069cfc82cf24f846913ef90d8a_b.jpg

16、CLK_CANConfig(CLK_CANDivider) //配置CAN时钟频率

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第69张图片

其中:

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第70张图片

17、 CLK_ClockSecuritySystemEnable() //启用时钟安全系统

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第71张图片

19. CLK_AdjustHSICalibrationValue(CLK_HSICalibrationValue)

//修复内部高速振荡器频率

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第72张图片

20.CLK_GetClockFreq() //获取系统时钟频率

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第73张图片
        u32 u32_clk_freq;
u32_clk_freq = CLK_GetClockFreq();
      

21. CLK_GetSYSCLKSource() //获取系统时钟源

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第74张图片

22. CLK_GetFlagStatus //获取系统时钟标志状态

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第75张图片

23. CLK_GetITStatus(CLK_IT) //获取系统时钟中断标志状态

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第76张图片

其中:

v2-256983eea3cd13ba6080cf31f29e159a_b.jpg

24.CLK_ClearITPendingBit(CLK_IT) //清除系统时钟中断标志状态

STM8库函数开发手册(1) //工程模板、GPIO、时钟_第77张图片

v2-256983eea3cd13ba6080cf31f29e159a_b.jpg
        
          CLK_ClearITPendingBit
          (
          CLK_IT_CSSD
          );
        
      

你可能感兴趣的:(STM8库函数开发手册(1) //工程模板、GPIO、时钟)