2013年11月25日 星期一

[STM32] 使用STM32F103CB USART功能之注意事項


在STM32撰寫 USART的程式碼,有幾個部份需要注意的
  1. 確認程式碼與要使用的腳位是否一致
  2. 確認Pin Mapping是否正確
  3. 確認雙方溝通的Baudrate是否一致
  4. 確認是使用Interrupt模式還是Polling模式
  5. 確認外部震盪器的值設定是否正確
基本上,1~4點,網路上都已經有清楚與完整的程式碼說明,但如果都已經確認程式碼沒問題了,但是還是無法正常傳送(Ex:有時候值是對的,有時候錯的),那使用示波器之前,你也可以先檢查你的 External oscillator (HSE/HSI)到底是幾Hz的,由於STM32的Sample Code的 External oscillator(HSE)是8MHz,不過從圖一可知道外接震盪器可接4~16Hz,故須注意此部分。 需要修改檔案 stm32f10x.h 的 HSE(High Speed External Clock Signal)和system_stm3210x.c的RCC部分。
  • stm32f10x.h 搜尋HSI和HSE修改成正確數值(圖二)。

圖二
  • system_stm3210x.c
  • 當把HSE修改成16000000Hz,必須做相對應的調整,首先找到SetSysClockTo72()
圖三
    • ADCCLK必須小於14MHZ,修正如下
    • 圖四
    • 開啟PLLXTPRE除二功能
    • /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
      RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |  RCC_CFGR_PLLMULL));

      RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9 | RCC_CFGR_PLLXTPRE);
     

Reference: 
[1] STM32F1 入門教學:USART / UART 字元(Char)發送 
[2] 第四步:STM32固件库以及编程起步(GPIO,UART) 
[3] [STM32] 关于USART接收中断的BUG和注意事项  

沒有留言:

張貼留言