STC8H库函数使用笔记

  • 目录
    • 库函数目录结构
    • 流程图
      • 1. **系统流程图**
    • 系统初始化程序

目录

库函数目录结构

打开官方的库函数综合例程,里面有4个文件夹,分别是User,APP,Driver,ISR。

User存放主函数 main,系统初始化 system_init 和分时任务调用 Task。
APP里存放了应用例程,我们可以直接在例程基础上改或者在APP文件夹新建我们自己的文件。
Driver存放了各硬件外设的驱动。

  1. User :存放主函数 main,系统初始化 system_init和分时任务调用Task;
  2. APP :里存放了应用例程,我们可以直接在例程基础上改或者在APP文件夹新建我们自己的文件;
  3. Driver :存放了各硬件外设的驱动,比如GPIO ,ADC,外部中断,定时器,UART,IIC等等;
  4. ISR :存放了各外设的中断函数;

流程图

1. 系统流程图

![Alt]
如上图,从入口main函数进去后,先调用system_init函数,把需要用到的硬件初始化后,在while循环运行任务调度函数Task_Pro_handler_Callback();用户程序就放在任务调度程序里。
系统时钟在config.h文件里,#define MAIN_Fosc 22118400L //定义主时钟

void main(void)
{SYS_Init();while (1){Task_Pro_Handler_Callback();}
}

系统初始化程序

“system_init.c”文件里存放系统初始化函数 SYS_Init(),执行全局初始化;

void SYS_Init(void)
{GPIO_config();Timer_config();ADC_config();UART_config();Exti_config();
//  I2C_config();
//  SPI_config();
//  CMP_config();Switch_config();EA = 1;APP_config();
}

SYS_Init提供了部分硬件的初始化程序,APP_config()里面存放用户自己需要初始化的程序。

GPIO初始化,IO口有四种模式:准双向口(弱上拉),高阻输入,漏极开路,推挽输出。不配置的话除P3.0 P3.1外其余上电后全是高阻输入模式,使用前需要配置对应的引脚。
在这里除了配置输入输出模式外,还可以配置内部上拉电阻,Pn_PULL_UP_ENABLE(Pin)可以使能内部4.1K上拉电阻。

void GPIO_config(void)
{P0_MODE_IO_PU(GPIO_Pin_All);       //P0 设置为准双向口P1_MODE_IN_HIZ(GPIO_Pin_LOW);       //P1.0~P1.3 设置为高阻输入P1_MODE_OUT_OD(GPIO_Pin_4 | GPIO_Pin_5);     //P1.4,P1.5 设置为漏极开路P2_MODE_IO_PU(GPIO_Pin_All);     //P2 设置为准双向口P3_MODE_IO_PU(GPIO_Pin_LOW);        //P3.0~P3.3 设置为准双向口P3_MODE_IO_PU(GPIO_Pin_HIGH);        //P3.4~P3.7 设置为准双向口
//  P3_MODE_IN_HIZ(GPIO_Pin_6 | GPIO_Pin_7);        //P3.6,P3.7 设置为高阻输入P4_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_6 | GPIO_Pin_7); //P4.0,P4.6,P4.7 设置为准双向口P6_MODE_IO_PU(GPIO_Pin_All);        //P6 设置为准双向口P7_MODE_IO_PU(GPIO_Pin_All);        //P7 设置为准双向口P1_PULL_UP_ENABLE(GPIO_Pin_4 | GPIO_Pin_5); //P1.4,P1.5 开启内部上拉
}

Timer_config();用来初始化定时器,共有5个定时器,这里初始化定时器0,产生1ms的中断,作为任务调度的基准时钟。

void Timer_config(void)
{TIM_InitTypeDef        TIM_InitStructure;                      //结构定义TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;   //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMaskTIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;      //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut    = DISABLE;                //是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 1000UL);        //初值,TIM_InitStructure.TIM_Run       = ENABLE;                 //是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer0,&TIM_InitStructure);                  //初始化Timer0   Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer0_Init(ENABLE,Priority_0);        //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}

第一句中TIM_InitTypeDef是结构体变量类型,这里可以省略struct 是因为定义的时候使用了typedef
链接: struct和typedef struct

使用typedef定义的结构体

  1. 是可以省略struct后边的结构体名
  2. 是使用TIM_InitTypeDef定义结构体时可以省略struct。
typedef struct
{u8 TIM_Mode;       //工作模式,     TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMasku8    TIM_ClkSource;  //时钟源       TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Extu8  TIM_ClkOut;     //可编程时钟输出,  ENABLE,DISABLEu16   TIM_Value;      //装载初值u8    TIM_Run;        //是否运行      ENABLE,DISABLE
} TIM_InitTypeDef;

使用TIM_InitTypeDef定义出结构体变量TIM_InitStructure,然后分别给TIM_InitStructure成员赋值,

TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;
TIM_InitStructure.TIM_ClkOut    = DISABLE;
TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 1000UL);
TIM_InitStructure.TIM_Run       = ENABLE;

赋值后使用定时器初始化函数Timer_Inilize(Timer0,&TIM_InitStructure);初始化定时器0;

STC8H库函数使用笔记相关推荐

  1. 【STC15库函数上手笔记】10、EEPROM

    目录 硬件知识 基本介绍 软件知识 EEPROM多字节读函数 EEPROM多字节写函数 EEPROM扇区擦除函数函数 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil ...

  2. 【STC15库函数上手笔记】9、硬件SPI

    目录 硬件知识 库函数 spi.c spi.h 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Develop ...

  3. 【STC15库函数上手笔记】7、PCA与PWM

    目录 硬知识 硬件知识 CCP/PWM/PCA模块的结构 软件知识 PCA初始化函数 PWM更新占空比函数 测试程序 PWM模式产生PWM信号 main.c 实验现象 16位软件定时器模式模式产生PW ...

  4. 【STC15库函数上手笔记】6、ADC

    目录 硬知识 ADC初始化函数 ADC电源控制函数 ADC查询转换函数 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 ...

  5. 【STC15库函数上手笔记】5、定时器

    目录 硬知识 定时器初始化函数 测试 基本功能测试 main.c 中断服务函数 实验现象 模拟PWM信号 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V ...

  6. 【STC15库函数上手笔记】4、USART串口

    目录 硬知识 串口初始化函数 串口1写缓冲函数 串口2写缓冲函数 串口1写数据块函数 串口2写数据块函数 模拟串口字节发送函数 模拟串口写数据块函数 测试 硬件串口 模拟串口 soft_uart.c ...

  7. 【STC15库函数上手笔记】3、外部中断

    目录 硬知识 外中断初始化函数 测试 main.c Exti.c STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Ki ...

  8. 【STC15库函数上手笔记】2、GPIO

    目录 硬知识 IO口初始化函数 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit ...

  9. 【STC15库函数上手笔记】1、建立工程

    目录 新建工程 添加文件到工程中 main.c 时钟 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Vers ...

最新文章

  1. mybatis报错There is no getter for property named '***' in 'class ***'
  2. Python自动化运维:Django Model进阶
  3. php中储存数据类型,PHP中的数据类型
  4. Leetcode 382. 链表随机节点 解题思路及C++实现
  5. 求最值(最大值和最小值)
  6. Github continuous deployment (CD) 最佳实践
  7. 谈谈女友卸妆后的感受?
  8. phpmyadmin在centos 7中安装
  9. 互联网协会点名QQ音乐等14款 App 过度收集用户信息
  10. springboot初始化逻辑_详解Spring Boot中初始化资源的几种方式
  11. SVN客户端安装详细教程
  12. 用python写的翻译器
  13. 机器人运动估计系列(番外篇)——从贝叶斯滤波到卡尔曼(上)
  14. python中exchange函数使用_Python下使用rabbitmq之exchange属性
  15. 大学操作系统期末考试复习经典计算题快速回顾
  16. 体检明明不查乙肝,但是体检报告就是不合格,公司不让入职
  17. Python + ChatterBot 创建聊天机器人
  18. Ubuntu开机一直滚屏 关键词:pcieport.......
  19. 基于c语言图像灰度拉伸算法实现,c语言实现图像灰度均衡化
  20. Android 登陆界面

热门文章

  1. dux修改index.php,DUX全站底部推广区修改
  2. css文本与字体样式(基础知识整理)
  3. 【JVM笔记】JVM发展历程—VM(Java虚拟机)介绍
  4. 网龙网络控股有限公司公布二零一八年中期业绩
  5. Microsoft SQL Server 数据库体系结构图解
  6. Android Log 机制
  7. 服务器重装2012,Windows Server 2012安装初体验
  8. 图片变成圆形和放大动画
  9. 硬货来了,RTE2022 大会技术专场:人性化、软硬件结合
  10. Unicode算法漏洞几乎祸害所有编程语言,Rust紧急发布补丁