上一篇我做了一个电量LED的程序,但是这个程序真的好粗暴,直接是用寄存器操作了,加载的库函数也没有用,,,,,,
那么现在我用库函数再点一次灯,
首先,首先,,,一定要说的是,,,
有好奇的同学可能已经把逐个文件打开过了,
在system_HR8P506.c这个文件下,有一个SystemInit函数,.
为什么会有这么一个函数,而且还是空的,,,,
噔噔噔,,,,
好了我就不卖关子了,SystemInit这个函数其实会在Main运行前就会被单片机调用一次,主要是用来写一些用户初始化的东西,
在哪里调用?
在我们伟大的startup_HR8P506.s这个文件上面..
打开文件,在103行.
具体机理我也不解释了,可以自己去百度一下,
解释一下含义就是,当单片机复位时,先调用RegInit这个函数,当然这个函数就在startup_HR8P506.s这个文件里,所以不用纠结,
再下面,就是先调用SystemInit函数,再运行Main函数...
是不是要刷新三观了,书上不是说好Main函数是所有程序的总部吗,..
好了,到现在你只要知道SystemInit是在Main函数前面运行的就可以了.,
进入主题,点灯2.0
void SystemInit(void)
{
GPIO_InitSettingType GPIO_InitTmp; //定义结构体变量
GPIO_InitTmp.Func = GPIO_Reuse_Func0; //管脚功能定义为功能0
GPIO_InitTmp.Dir = GPIO_Direction_Output; //设置为输出
GPIO_InitTmp.DS = GPIO_DS_Output_Normal; //普通电流
GPIO_InitTmp.ODE = GPIO_ODE_Output_Disable; //开漏禁止
GPIO_InitTmp.PDE = GPIO_PDE_Input_Disable; //弱下拉禁止
GPIO_InitTmp.PUE = GPIO_PUE_Input_Disable; //弱上拉禁止
GPIO_InitTmp.Signal = GPIO_Pin_Signal_Digital; //管脚类型为数字模式
GPIO_Init(GPIO_Pin_B0,&GPIO_InitTmp); //初始化管脚
GPIO_Init(GPIO_Pin_B1,&GPIO_InitTmp);
}
在system_HR8P506.c文件下的SystemInit函数加入这段代码.
int main(void)
{
while(1)
{
GPIO_ToggleBit(GPIO_Pin_B0); //取反管脚电平
GPIO_ToggleBit(GPIO_Pin_B1);
Delay(0xfff);
}
}
main函数直接这样就好了,,,不用调用SystemInit~~~
编译,下载,,OK,灯亮依旧....