嵌入式MicroFlighter 之STM32F103學習——編寫第一個STM32程序


  因為第一次接觸STM的單片機,各種寄存器和API都不熟悉,於是結合STM的庫函數和編程手冊對照理解。建立好工程之后,編寫main函數。

  1.不管哪種單片機,上電以后第一重要的事就是設置時鍾和初始化引腳。單看STM32F的時鍾:

  能作為STM32F103的系統時鍾的有三種,外部時鍾,內部時鍾,PLL時鍾。

  [cpp] view plain copy

  1. int main(void)

  2. {

  3. SystemInit();

  4. return 0;

  5. }

  跟蹤到SystemInit里面,一開始CPU工作於內部時鍾,代碼初始化一些時鍾寄存器的值。然后調用SetSysSClock()設置新的時鍾源。

  [cpp] view plain copy

  1. static void SetSysClock(void)

  2. {

  3. #ifdef SYSCLK_FREQ_HSE

  4. SetSysClockToHSE();

  5. #elif defined SYSCLK_FREQ_24MHz

  6. SetSysClockTo24();

  7. #elif defined SYSCLK_FREQ_36MHz

  8. SetSysClockTo36();

  9. #elif defined SYSCLK_FREQ_48MHz

  10. SetSysClockTo48();

  11. #elif defined SYSCLK_FREQ_56MHz

  12. SetSysClockTo56();

  13. #elif defined SYSCLK_FREQ_72MHz

  14. SetSysClockTo72();

  15. #endif

  16.

  17. /* If none of the define above is enabled, the HSI is used as System clock

  18. source (default after reset) */

  19. }

  可以看到用戶只需要定義相應的宏就可以設定時鍾。宏定義在本文件的最上面。我使用的芯片是STM32F103C6T8,文件中定義了

  [cpp] view plain copy

  1. SYSCLK_FREQ_72MHz

  感覺STM的庫寫的不好的是如果72MHz時鍾不正常,時鍾初始化函數沒用任何返回信息,只能在STM提供的函數中增加:

  有失程序的靈活性和獨立性。

  而初始化代碼中的各種寄存器定義的賦值參考STM編程手冊,就明白了。主要的寄存器有這些:

  

 

 

  2.設置GPIO: 點亮一個Led:PA3---電阻--Led--GND

  [cpp] view plain copy

  1. int main(void)

  2. {

  3. //SystemInit();

  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打開APB2時鍾,GPIO都是掛在APB2上的

  5. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; // 設置IO模式(模式,速度,引腳等等)

  6. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

  7. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  8. GPIO_Init(GPIOA, &GPIO_InitStructure);

  9. GPIO_SetBits(GPIOA, GPIO_Pin_3); // GPIOA->BSRR = GPIO_Pin_3; //置位

  10.

  11. while(1)

  12. {

  13. GPIO_SetBits(GPIOA, GPIO_Pin_3); // 其實就是 GPIOA->BSRR = GPIO_Pin_3;

  14. delay(1000);

  15. GPIO_ResetBits(GPIOA, GPIO_Pin_3); //等價於 GPIOA->BRR = GPIO_Pin_3;

  16. delay(1000);

  17. }

  18. return 0;

  19. }

  Ctr+F5開始Debug,運行程序,察看效果(下載程序之后程序沒有直接執行,不知道我設置的問題還是本身就這樣子)。

  后來發現可以在這里設置:

  

 

  3.使用printf函數。需要配置選項,不然的話,只要加入了printf,程序不能正常運行。 使用技巧參考 http://www.amobbs.com/thread-5061319-1-1.html

          想要觀看跟多相關視頻:www.makeru.com.cn/?t=12

          嵌入式學習交流群:561213221


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM