STC8H库函数使用笔记

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]STC8H库函数使用笔记_第1张图片
如上图,从入口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_16BitAutoReloadNoMask
	TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;		//指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
	TIM_InitStructure.TIM_ClkOut    = DISABLE;				//是否输出高速脉冲, ENABLE或DISABLE
	TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 1000UL);		//初值,
	TIM_InitStructure.TIM_Run       = ENABLE;					//是否初始化后启动定时器, ENABLE或DISABLE
	Timer_Inilize(Timer0,&TIM_InitStructure);					//初始化Timer0	  Timer0,Timer1,Timer2,Timer3,Timer4
	NVIC_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_16BitAutoReloadNoMask
	u8	TIM_ClkSource;	//时钟源		TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
	u8	TIM_ClkOut;		//可编程时钟输出,	ENABLE,DISABLE
	u16	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;

你可能感兴趣的:(笔记,单片机,嵌入式硬件,51单片机)