STM8S自学笔记之利用库函数点亮一个LED

  1. 准备工作及前提
    a、已安装IAR或者STVD
    b、下载标准固件库(StdPeriph_Lib_V2.1.0)备用;
    c、已建立好一个程序模板,如未建立请参考我的博客中的帖子STVD+STM8官方固件库创建工程模板;
    d、(非必要)已下载STM8s库函数所在的程序版手册;
    e、(非必要)Flash Loader Demonstrator,这是ST的ISP烧写,对于STM8只有支持BootLoader的才行,STM8SF103本身木有BootLoader,需要自己写故而此处只是提及,但不要求,后期学习时再更新,但还是装上较好,因为要是后期我更新了呢。

  2. 使用软件
    STVD(全称ST Visual Develop)——编程使用;
    stm8slib(使用手册程序版) ——查找库函数及库函数的调用方法;
    STVP(全称ST Visual Programmer)——烧录程序;

  3. 开始
    1)模板准备工作
    a、复制程序模板,并重命名文件夹为LED,这样既保留了程序模板,又便于后期开发其他项目时不用再重新一步一步执行创建模板时的必要过程,节省时间;
    b、打开STVD后,选择File->Open Wodkspace,选中LED模板Cosmic下的Demo.stw打开即可,但还不忙写自己所要实现的任何功能的函数;
    c、为自己的主函数文件开始处添加块注释信息如下,完成后点击左侧方块收起块(如图)注释,方便管理和修改:
    /**********************************************
    ** 文件名    :  main.c
    ** 作       者 :  Killer
    ** 创建日期 :  2017.12.16
    ** 版       本 :  V0.1
    ** 功能描述 :  ANSI C.主函数调用其他函数实验点
    **                    亮LED或者熄灭LED.
    **********************************************/STM8S自学笔记之利用库函数点亮一个LED_第1张图片

    d、编译模板,没有错误时,开始添加自己要实现的功能代码。


    2)功能实现
    3.2.1、理清点亮LED逻辑思路
    a、LED的亮灭是由LED所在GPIO端口引脚输出高低电平来实现;
    b、根据电路接法选择GPIO端口、或者引脚工作模式、电平翻转速率;
    c、(非必要)可以在初始化端口前将对应GPIO端口寄存器恢复到默认值。
    注意:此处端口是指如GPIOA、GPIOB等,由8位(或者说8个引脚)组成,如51单片机的P0、P1等;而GPIO端口引脚、GPIO引脚、引脚则是这些端口的某一个引脚,如51单片机的P0.0,P1.1等,此处可以理解为GPIOA.0 GPIOB.2等;

    3.2.2、根据思路在stm8s_gpio.c文件中查找响应函数
    a、经查看文件可将对应高低电平输出到引脚的函数原型如下:
    void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t 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 PortPins);
    参数解释如下
    GPIO_TypeDef* GPIOx:端口类型参数为GPIOA、GPIOB等具体端口;
    uint8_t PortVal:8位二进制组成的一个端口值,每一位操作一个引脚;
    GPIO_Pin_TypeDef PortPins:引脚类型数据,具体为GPIO_Pin_0~GPIO_Pin_7,神奇的是库函数还让你一次性操作高四位或者第四位参数为GPIO_PIN_LNIB(低四位),GPIO_PIN_HNIB(高四位),全部8位就是GPIO_PIN_ALL。


    3.2.3、初始化LED所在引脚
    继续查找stm8s_gpio.c,并找到类似Init字样即可,其中Init是Initialize的缩写。
    void GPIO_DeInit(GPIO_TypeDef* GPIOx);
    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);
    其中第一个为恢复到默认值(De【fault】)的初始化;第二个则是对应引脚的初始化;


    3.2.4、使用程序办库函数使用手册配置GPIO引脚
    a、运行STM8S自学笔记之利用库函数点亮一个LED_第2张图片


    b、选择库函数功能及配置
    STM8S自学笔记之利用库函数点亮一个LED_第3张图片


    图中手绘步骤数字描述:
    1步:选择对应功能的库函数;
    2~4步:选择该库函数的对应参数,例如本函数GPIO_Init:
    第一个参数为步骤2的LED所在端口;
    第二个参数为步骤3的对应LED在端口中所在引脚;
    第三个参数为该引脚工作模式选择;
    5步,将所选参数生成代码;
    6步:将生成的代码剪切至系统剪贴板,在STVD或其他IDE中粘贴即可。

  4. 总体代码实现
    STM8S自学笔记之利用库函数点亮一个LED_第4张图片

  5. 总结
    对于GPIO操作时须有如下步骤,即使是STM32、STC15等单片机,不论是库函数还是寄存器亦是如此:
    1、初始化端口
    2、初始化所在引脚并设置翻转速度、工作模式,如:开漏/推挽、输入/输出;
    3、对端口或者指定引脚写入数据;

你可能感兴趣的:(STM8自学)