顯示具有 STM32F401 標籤的文章。 顯示所有文章
顯示具有 STM32F401 標籤的文章。 顯示所有文章

2015年12月2日 星期三

STM32F4 USB Host + FAT_FS Example Code

1. 本範例是參考ST官方提供的stm32f429 discovery board的其中一個範例:
     LTDC_AnimatedPictureFromUSB來參考修改的, 如下圖所示, 將一個usb disk插入usb port後,
     可以在stm32f429 discovery board上內建的LCD顯示相關資訊.


2. 由於我們使用的硬體為stm32f4x1 discovery board, 並沒有內建LCD螢幕, 因此呈現方式為使
    用stm32f4x1 discovery board + usb disk + fat fs, 透過fat fs在usb disk中寫入一個STM32.TXT
    檔.


3. 在STM32.TXT檔中除了會寫入usb disk information外, 還可以寫入類似像log之類的user
     message.

4. 測試方式可以參考影片:


  • 在尚未插入usb disk之前, discovery board上面的LEDs會採用旋轉的方式來輪流亮起.
  • 當插入usb disk, 且系統有偵測到的話, 則是不停地toggle LEDs, 此時並可以看到usb disk的讀寫燈會有間歇性的亮起, 代表有在寫入.
  • 在寫入的過程中, 如按下User Button, 則代表停止寫入, 並將file system關掉及re-mount usb disk.
  • 此時可以將usb disk與PC連接, 可以看到根目錄下會有一個STM32.TXT檔案.
  • 打開STM32.TXT檔案後可以看到usb disk相關的資訊, 以及我們測試的log message.


5. 完整程式下載連結如下:
    stm32f4x1_discovery_usbhost_fatfs_example







2015年11月30日 星期一

STM32F4 Usart Polling/Interrupt/DMA Example Code

1. 本範例是使用stm32f4x1 discovery board當做硬體測試平台, 搭配ttl to usb小板與pc之間溝通.

2. stm32f4x1 discovery board上是選用PA2(Tx)及PA3(Rx)這2隻GPIO來當做Usart Tx/Rx, 因此所
    有的範例皆採用這2隻來進行測試.

3. Usart Example Code共有底下4種測試程式, 分別是根據Tx及Rx可以設定的方式排列出來, 由
    於Rx polling mode於實際上非常少用, 所以就不進行測試了.

  • Tx: Polling, Rx: Interrupt.
  • Tx: Interrupt, Rx: Interrupt.
  • Tx: DMA, Rx:Interrupt.
  • Tx: DMA, Rx: DMA

4. PC端的測試工具是使用Putty, baud rate預設是使用921600.



5. 接線方式:
  • stm32f401 discovery board  PA2(Tx)  =>  ttl to usb小板 Rx
  • stm32f401 discovery board  PA3(Rx)  =>  ttl to usb小板 Tx
  • stm32f401 discovery board  GND  =>  ttl to usb小板 GND


6. 範例的呈現方式皆是將鍵盤上輸入的字元原封不動地輸出, 也提供了兩個比對特定字串的範
    例, 如輸入'hello', 會出現'world', 輸入'justin', 會出現'wang', 且支援"Backspace"功能, 當輸入到
    一半時, 發現打錯字, 可以使用"Backspace"來更正輸入字串.



7. 完整範例連結如下:

2015年11月15日 星期日

STM32F401/411 HID Test(Keyboard + Mouse + HidRaw)

1. 本範例是利用stm32f401 discovery board來實做出usb keyboard/mouse/hidraw等裝置, 並送出簡
    單的測試資料來驗證是否正確.


2. 程式完整範例下載連結:
    STM32F401_411_HID_TestCode

3. main flow:

  • 程式用來切換hid or vcp的設定在stm32f401_discovery.h中, 由於現在要測試的是HID, 因此我們預設使用HID, 而底下的KeyBoardTest/MouseTest/HidRawTest等3個define, 則是決定可以進行哪些項目的測試, 可以全部一起打開, 也可以只打開其中一個.
  • main loop主要在執行button scan, 當確認到user有按下user button後, 根據不同的define去送出不同的資料.
  • 特別需要注意的是當keyboard/mouse放開時, 需送出release key的event, 否則會看到連發key的情形出現, 而hidraw則不需要.
4. Test Flow:
  • keyboard test: 可以先開啟一個空白文字檔來測試, 當按下user button時, 會送出一個小寫(in lowercase letters)的a出現, 放開即馬上停止輸出.



  • mouse test: 當按下user button時, 滑鼠鼠標會朝右上方移動, 放開即馬上停止輸出.


  • hidraw test: 測試時, 可先安裝Bus Hound tool, 接著接上stm32f401 discovery board, 若成功則可以看到我們新增出來的usb device(ex: [32]USB輸入裝置).

  • 當按下user button即可看到我們輸出的資料, 放開不需做其它處理即會自行停下.

2015年11月12日 星期四

STM32F401/411 Virtual Com-Port(VCP) Two Way Test

1. 此測試程式是利用stm32f401 discovery board實做出virtual com port function(vcp), 並透過vcp
    接收一個binary file, 並於接收完畢後, 將整個binary file透過vcp顯示出來.

2. 完整範例和測試檔案下載連結:
    STM32F401_411_VCP_TwoWay_TestCode

    GPIO_IOToggle.bin

3. 硬體電路連結方式如下, 將stm32f401 discovery board的mini usb(stlink)和micro usb(usb slave)
    與電腦連接.
 


 4. 安裝stm32 virtual com port driver, link: stm32_vcp_driver

5. main flow:

  • 目前usb的設定預設值是使用virtual com port, 之後會再解釋hid.
  • 當程式開始執行且USB Init成功之後, 可以在裝置管理員的地方看到STMicroelectronics Virtual COM Port(COMx)的裝置.



  • main.c的流程只有兩個function, 第一個是一直在等待vcp接收bin file, 第二個是將接收完成的bin file打印在vcp顯示出來. 


  • vcp rx function:  目前接收的上限是設定在50kbytes, 如果是使用stm32f411 discovery board的話, 則可以設定到100kbytes.
  • vcp tx function:  只需要將要傳送出去的buffer帶進來即可.


6. Test flow:

  • 選用一個可以send file的terminal tool(ex: Tera Term or Terminal_v1.93b.....).
  • 接下來使用Tera Term來測試如何傳送及顯示一個binary file.
  • 開啟後設定Tera Term去開啟stm32 virtual com port(ex: COM7), 設定可以參考下圖.




  • 當設定成功後, 可以看到下圖畫面, 代表已經連線.




  • 此時點選File -> Send file:



  • 選定一個要傳送的test binary file(ex: GPIO_IOToggle.bin), 並按下開啟即會開始傳送, 傳送過程中, LED4 & LED5會一直閃爍, 當停止閃爍恆亮時, 代表STM32F401接收完成.




  • 當接收完畢後, 程式即會自動將接收的binary file透過vcp傳送出去, 因此可以在Tera Term上的視窗看到如下畫面.




  • 我們可以使用UltraEdit開啟GPIO_IOToggle.bin來簡單比對一下是否相同, 以下截取開始和結尾的畫面來簡單比較, 看來應該是沒有差異, 代表傳送接收皆正確.























2015年11月9日 星期一

How to get code version from binary file on IAR EWARM?

1. 當在與客戶開發專案的時候, 雙方的hex或是bin檔案可能都會來來回回寄個幾十個版本,
    而大部分皆是直接在檔名上修改個版號(ex: 001.bin....), 或是在程式中修改版號, 當程式跑
    起來後, 透過類似I2C/UART/SPI....等的溝通得到目前的版號.

2. 而往往出錯的皆是類似像上述的方式, 可能忘了改檔名或是為了快點修改Bug,而忘了修改
    程式中的版號, 導致許多問題產生, 因此如果有可以直接從build出來的binary來得到版號的
    話,應該可以減少一些無謂的時間浪費.

3. 現在要介紹的是利用vector_table中的reserved area來放版本號的方式:


  • 開啟IAR Project後, 先在程式中新增一個CodeVersion.h檔案.

  • 先輸入一個預設的版號, ex: 0x12345678
  • 開啟startup_stm32f401xx.s檔案, 並include CodeVersion.h, 且在reserved area中放入我們預設的版號.
  • 若是直接build code的話, 一定會有error, 因為我們在組語的部份加入CodeVersion.h的路徑給程式知道.
  • 輸出檔案的部份, 可以先使用binary來輸出.

  • 當程式編譯過後, 可以在輸出的目錄下找到Template.bin
4. 我們可以使用可以開啟binary檔案的編譯器來觀察, 例如使用Ultraedit來開啟Template.bin, 開
    啟後可以看到我們之前設定的版號0x12345678, 且位置均固定, 因此再也不需要等待程式跑
    起來後才能去得知版本號了.


5. Test Platform: STM32F401 Discovery Board.

6. 完整測試檔案連結如下:













2015年10月19日 星期一

How To Enable CMSIS-DSP On STM32F4

1. 在IAR官網上有看到介紹CMSIS-DSP的內容, 本文主要是根據其內容進行測試的sample code.
     硬體上是使用STM32F401 Discovery Board + Logic Analyzer


2. IAR官網的CMSIS-DSP連結如下:
    IAR CMSIS-DSP Link

3. CMSIS-DSP Library Enable Flow:

  • Copy CMSIS folder into your project.
  • Set the CMSIS-DSP Library option in the General Option->Library Configuration page.
  • Define the appropriate Preprocessor MACRO depending on the target processor in the application.
    • ARM_MATH_CM4
    • ARM_MATH_MATRIX_CHECK
    • ARM_MATH_ROUNDING
    • __FPU_PRESENT
    • __FPU_USED


    4.main.c程式流程及量測方法:

    • 在需要使用到CMSIS-DSP Library的程式裡面需要include <arm_math.h>
    • 從範例程式中可以看到主要是比較有無使用CMSIS-DSP Lib在做square function的時間差異
    • 本範例是利用GPIOD13搭配Logic Analyzer來量測兩者的時間差異


    • Logic Analyzer的波形上可以看到:
      • 使用CMSIS-DSP Library的sqrt function的執行時間為0.5usec.
      • 不使用CMSIS-DSP Library, 使用內建math.h的執行時間為8usec(A1-A2).
      • 兩者之間的時間差異倍數: 8usec/0.5usec = 16.

    5. 完整測試範例下載連結如下:
        STM32F401-DiscoveryBoard-CMSIS-DSP-Example