以前給出完整程序時,是為了方便初學者看。將main函數用到的所有函數都放到main函數後,在main函數前加上函數聲明,這樣會顯得main.c文件沒有層次,所有函數在main.c中沖淡了功能代碼。
一般項目中的文件組織結構是這樣的:main.c文件只包含體現功能的代碼。
main.c頭文件只包含兩個
#include "stm32f0xx.h"#include "hw_config.h"
接下是用戶自定義的宏,這些宏也要是跟功能息息相關的,說白了就是main函數用到的,如果跟功能不直接相關,可以放到hw_config.h定義,如GPIO管腳的定義
#define OE GPIO_Pin_5
接下是全局變量的定義,也是本著main函數用到的在這裡定義。
接下就是main函數了,其結構是
void main(void){ //定義main函數用到的局部變量 //初始化全局變量和局部變量 //初始化硬件,如RCC、NVIC、GPIO、TIM、USART、Systick、IWWDG等 //下面就是實現功能代碼了,一般是while(1)結構. while (1) { }}
main.c文件就包含這些代碼,至於main函數調用的函數,如RCC_Configuration、NVIC_Configuration、GPIO_Configuration、SysTick_Configuration、USART1_Configuration等,在hw_config.h聲明,在hw_config.c中定義。
注意:因為main函數調用的所有函數都在hw_config.c中定義,所以在hw_config.c中勢必會定義一些變量,而這些變量在main.c文件中也要用到,只需將這些變量在hw_config.h中extern聲明一下。這樣即使stm32f0xx_it.c也用到hw_config.c中定義的這些變量,也只需包含hw_config.h頭文件即可。
以一個計數變量usart1_invalidframe_time為例,在hw_config.c定義,在hw_config.h中用extern聲明,在main.c中清零(usart1接收到數據將該變量清零),在stm32f0xx_it.c的SysTick_Handler函數中每1ms加加一次。