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月25日 星期三

nRF52832 BLE Mouse Test(IAR EWARM Version)

1. 跟之前提供的nRF52832 BLE Mouse Test範例功能完全相同, 只差在一個是Keil-MDK, 一個是
    IAR EWARM的版本而已.

2. IAR EWARM Version完整範例下載連結:
    ble_app_hids_mouse_iar_ewarm

3. 預設是使用DK(PCA10040)板子, 若需要改用Preview DK, 請將底下設定改為PCA10036.



4. 測試影片如之前所示:


2015年11月24日 星期二

nRF52832 Errata Document

1. 最近在nRF52832上面檢測一些問題, 發現怎麼樣都解不掉, 或是程式跑到一些function時, 一
    定會有飛掉的情況發生, 經詢問了代理商之後, 原來發現是IC本身的問題造成的.

2. 目前拿在手上的板子有兩塊, 分別是Preview DK & DK這兩塊板子, 經上官網查詢才知道原來
    是這兩塊板子上面的都是工程樣品, 只是DK解掉了一些Preview DK的問題, 可以透過板子上
    的IC編號來得知自己手上拿到的是哪一個版本, 目前我手上Preview DK上面的是Engineering
    A(QFAA-AA), 而DK上面的是Engineering B(QFAA-BA).



3. 現在看起來最新版本的IC是Rev 1, 不過不知道會上在哪一塊板子上, 或許是DK上面吧, 只是
    我手上拿到的剛好都是工程樣品, 若是發現有解不掉的問題或是遇到怎樣都無法啟動的功能,
    建議可以先上官網查一下是不是剛好是IC的問題, 以免浪費許多時間Debug.

4. 官網查詢Link:  Errata v1.1 & v1.0

2015年11月20日 星期五

nRF52832 BLE Mouse Test

1. 最近使用nRF52832做了airmouse相關的demo, 因此對於ble_app_hids_mouse這個example code
    有一些初步的了解.

2. 本範例的執行結果是當藍芽滑鼠與PC配對成功後, 會不停地劃方, 且按下Button3會等同於按
    下滑鼠左鍵.

3. 完整範例下載連結:
    nRF52_SDK_0.9.2_bt_mouse 

4. 由於現在nRF52有Preview DK & DK兩塊板子, 因此在不同的開發板上要執行此程式, 須記得
    要修改define, 如使用Preview DK的話, 請修改為BOARD_PCA10036.
 


5. 原先的範例如要傳送mouse button的資訊到PC的話, 需使用與mouse dx dy不同的id, 這樣會浪
    費BLE頻寬, 因此我有修改BLE Profile, 讓dx dy與button可以同時傳送給PC.

6. main loop flow:

  • 程式一開始會先設定一個10msec的Timer, 利用這個Timer每次送一個Flag給main loop判斷何時要傳送dx dy & button給PC.
  • main loop則是不停地檢查mousetimerIsReady flag, 當發現為1時, 則去執行key scan & send dx dy.  



  • 劃方程式如下所示, 只是不斷地送出固定的dx dy座標給PC, 並配合key scan一同將結果送出去.

7. Test Flow:

  • 當程式燒入DK Board後, 此時會看到LED1約間隔1秒的頻率在閃爍著.
  • 此時可以使用藍芽新增裝置來新增Nordic_Mouse.






  • 當新增完畢後, 便可以開始測試, 底下是使用Mouse Test2這個Tool進行測試的影片.

2015年11月17日 星期二

nRF52 Preview DK vs. nRF52 DK

1. 今天上班才發現昨天上課拿到的是nRF52 DK, 跟之前拿到的nRF52 Preview DK有些微不同.

2. 看起來變動比較大的是NFC的部份, 板子的質感也有向上提升一些.



2015年11月16日 星期一

Nordic Global Tech Tour 2015 (Taipei)

1. 今天一早去台大參加Nordic的研討會.

2. 參加者可以得到一塊免費的開發板.

3. 會後寄出了今天上課的投影片檔案.












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月14日 星期六

2015-11-14-康寧附幼-幼綠班-運動會

    今天陪著大女兒一起參加運動會, 比起去年的表現, 今年真的是進步不少, 希望明年能順便一起參加小女兒的運動會啊.







2015年11月13日 星期五

Wii Remote Control + ASR + Melody Recognition + ROBONOVA-I

1. 今天整理資料突然看到以前在學校拍的影片, 以前比較瘦啊, 真是令人懷念.......XD


2. 記得當時使用的MCU是Generalplus的GPCE061A 16Bit Micro-Controller.


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來簡單比對一下是否相同, 以下截取開始和結尾的畫面來簡單比較, 看來應該是沒有差異, 代表傳送接收皆正確.