STC8H库函数使用笔记
STC8H库函数使用笔记
- 目录
- 库函数目录结构
- 流程图
- 1. **系统流程图**
- 系统初始化程序
目录
库函数目录结构
打开官方的库函数综合例程,里面有4个文件夹,分别是User,APP,Driver,ISR。
User存放主函数 main,系统初始化 system_init 和分时任务调用 Task。
APP里存放了应用例程,我们可以直接在例程基础上改或者在APP文件夹新建我们自己的文件。
Driver存放了各硬件外设的驱动。
- User :存放主函数 main,系统初始化 system_init和分时任务调用Task;
- APP :里存放了应用例程,我们可以直接在例程基础上改或者在APP文件夹新建我们自己的文件;
- Driver :存放了各硬件外设的驱动,比如GPIO ,ADC,外部中断,定时器,UART,IIC等等;
- 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定义的结构体
- 是可以省略struct后边的结构体名
- 是使用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库函数使用笔记相关推荐
- 【STC15库函数上手笔记】10、EEPROM
目录 硬件知识 基本介绍 软件知识 EEPROM多字节读函数 EEPROM多字节写函数 EEPROM扇区擦除函数函数 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil ...
- 【STC15库函数上手笔记】9、硬件SPI
目录 硬件知识 库函数 spi.c spi.h 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Develop ...
- 【STC15库函数上手笔记】7、PCA与PWM
目录 硬知识 硬件知识 CCP/PWM/PCA模块的结构 软件知识 PCA初始化函数 PWM更新占空比函数 测试程序 PWM模式产生PWM信号 main.c 实验现象 16位软件定时器模式模式产生PW ...
- 【STC15库函数上手笔记】6、ADC
目录 硬知识 ADC初始化函数 ADC电源控制函数 ADC查询转换函数 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 ...
- 【STC15库函数上手笔记】5、定时器
目录 硬知识 定时器初始化函数 测试 基本功能测试 main.c 中断服务函数 实验现象 模拟PWM信号 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V ...
- 【STC15库函数上手笔记】4、USART串口
目录 硬知识 串口初始化函数 串口1写缓冲函数 串口2写缓冲函数 串口1写数据块函数 串口2写数据块函数 模拟串口字节发送函数 模拟串口写数据块函数 测试 硬件串口 模拟串口 soft_uart.c ...
- 【STC15库函数上手笔记】3、外部中断
目录 硬知识 外中断初始化函数 测试 main.c Exti.c STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Ki ...
- 【STC15库函数上手笔记】2、GPIO
目录 硬知识 IO口初始化函数 测试 main.c 实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit ...
- 【STC15库函数上手笔记】1、建立工程
目录 新建工程 添加文件到工程中 main.c 时钟 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Vers ...
最新文章
- mybatis报错There is no getter for property named '***' in 'class ***'
- Python自动化运维:Django Model进阶
- php中储存数据类型,PHP中的数据类型
- Leetcode 382. 链表随机节点 解题思路及C++实现
- 求最值(最大值和最小值)
- Github continuous deployment (CD) 最佳实践
- 谈谈女友卸妆后的感受?
- phpmyadmin在centos 7中安装
- 互联网协会点名QQ音乐等14款 App 过度收集用户信息
- springboot初始化逻辑_详解Spring Boot中初始化资源的几种方式
- SVN客户端安装详细教程
- 用python写的翻译器
- 机器人运动估计系列(番外篇)——从贝叶斯滤波到卡尔曼(上)
- python中exchange函数使用_Python下使用rabbitmq之exchange属性
- 大学操作系统期末考试复习经典计算题快速回顾
- 体检明明不查乙肝,但是体检报告就是不合格,公司不让入职
- Python + ChatterBot 创建聊天机器人
- Ubuntu开机一直滚屏 关键词:pcieport.......
- 基于c语言图像灰度拉伸算法实现,c语言实现图像灰度均衡化
- Android 登陆界面