1.在主函數的正式調用里,RCC的配置一定要在各外設的函數調用之前。
2.外設調試出現問題時,一定先考慮是不是沒有打開外設的時鐘。并且RCC配置和外設時鐘的打開要在配置寄存器之前。
3.使用模塊化編程可以使程序簡單易讀,可移植性高,下一次調用方便。但是可能會出現很多問題,必須一一克服。 在主函數里,把需要用得到的各模塊配置函數調用寫入,這一點很重要。
4.模塊化編程時,一定要確保模塊的.c文件添加進了工程目錄,否則會出現:Undefined Symbol的錯誤提示,這一點要牢記。
5.中斷服務函數必須要寫進stm32f10x.it.c里面。否則會出問題。
6.有時添加的模塊太多可能會調試不出來,這時考慮把GPIO的端口復用AFIO打開。
7.外部中斷的應用:
(1).EXTI的GPIO外部線路中斷設置;
(2).EXTI初始化配置;
(3).中斷服務函數里的寫法:(如EXTI_9_5之類)盡量單元間 各自用各自的if和else if。
互相的單元間不要用else if連接。
( 4 ).中斷服務函數里第一步就要清除中斷標志位。
8.初始化外設如果在循環里面,比如PWM配置:
while(1)
{ TIM_Config(); }
這個時候如果不加延遲語句,很可能會出錯,加入延遲可以一定程度改善。
9.break語句是跳出里的最近的循環體。但是要注意,if不屬于循環體。所以一個while(1)里面只有if,一個break就讓全盤跳出while(1)!
10. while(1)
{
if(!Front_LDR_Signal)
{
if(a==1)
{}
else
{
a=1;
b=0;
drive(700,0,700,0);
Delayms(80);
}
}
if(Front_LDR_Signal)
{
if(b==1)
{}
if(b==0)
{
a=0;
b=1;
drive(700,0,0,0);
Delayms(80);
}
}
用if雙層判斷語句可以很好地避免每一次循環都要重新配置PWM,節約CPU。這個用法很好。
11.外部中斷函數不能進入的原因分析:
1)GPIO或者AFIO的時鐘沒有開啟;
2)GPIO和配置的中斷線路不匹配;
3)中斷觸發方式和實際不相符合;
4)中斷處理函數用庫函數時,寫錯,經常可能出現數字和字母之間沒有下劃線;
5)外部中斷是沿觸發,有可能不能檢測到沿,比如 中斷線是低電平(浮空輸入),觸發是下降沿觸發,可能會出現一直是低電平,高電平的時候是一樣的情況,電平持續為高電平;
6)沒有用軟件中斷來觸發外部中斷,調用函數EXTI_GenerateSWInterrupt;,因為軟件中斷先于邊沿中斷處理。
12.中斷NVIC的配置(尤其是其中的NVIC_InitStructure.NVIC_IRQChannel = EXTIx_IRQn;),絕對不可以占用輸出等功能的GPIO口通道。比如配置了NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; 那么PX2輸出PWM就會出現不可預知的問題。