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

2023年9月15日 星期五

[Panel] SSD1963 Init + Show R,G,B by STM32F446

前陣子在淘寶買了一塊4.3吋的Panel, Driver IC是用SSD1963, 搭配的MCU是使用STM32F446.

讓螢幕依序顯示RED, GREEN, BLUE.


2019年8月23日 星期五

[Life] 意法半導體 STM32 微控制器研討會-台北

  • 8月8日前往大直美福飯店參加了STM32微控制器技術研討會, 如果以規模來講, 感覺僅次於ARM所舉辦的研討會而已.
  • 這次研討會所討論的項目中, 最吸引我的就是STM32H7和STM32WB這兩顆雙核的MCU了.
  • 目前雙核的MCU只有幾年前使用過NXP的LPC54系列, 但當時使用的時候其實並不是相當地方便, 導致於最後還是僅使用M4單核而已,期待到時買到開發板之後, 能夠比之前的好使用.
  • 最後在研討會抽獎的活動中, 抽到了松騰的掃地機器人, 這大概是意料之外的父親節禮物了吧....xDD
  • 底下是這次研討會的投影片, 有需要的人可以自行下載研究.
    1. Dual-core STM32H7 High-performance MCUs
    2. Dual-Core Wireless MCUs Introducing the STM32WB
    3. New Generation of STM32 Products_Roadmaps_and_innovations
    4. STM32 Ecosystem and STM32CubeIDE
    5. STM32G4 The Motor Control Ecosystem
    6. STM32L5 Arm Cortex-M33 with TrustZone
    7. STM32MP1 MPU and AI

2018年12月9日 星期日

[STM32] STM32F072B + FreeRTOS v8.2.3 + VCP + KB + MOUSE + HIDRAW 2 WAY

1. 本篇是基於STM32F072B Discovery Board unboxing + FreeRTOS v8.2.3 + USB_VCP_HID 這一篇為基礎,加上HID RAW雙向的功能後產生的新文章.

2. Main Loop Flow:
  • 切換HID/VCP仍舊在usb_define.h.
  • 切換HID RAW/KB/MOUSE仍舊在usb_define.h.
  • 主程式裡面仍舊是維持2個Task, 所有的測試程式都是在Task2裡面.
  • 這一次的範例程式中只要是MCU To PC的資料, 都要按下USER Button後才會發送到PC (e.g. VCP/KB/MOUSE/HID Interrupt In).
  • VCP/KB/MOUSE的展示方式不變, 只是需要按下USER Button才會觸發.

2018年9月16日 星期日

[CMSIS-RTOS RTX] How to Porting RTX on STM32F429 Discovery Board, Step by Step.

Porting Purpose:

  • Porting CMSIS-RTOS RTX on STM32F429 Discovery Board.
  • Create one startup task and two LED toggle tasks.
  • Check by Logical Analyzer.

Test Video:

2016年11月5日 星期六

STM32F429 Nintendo Entertainment Simulator with Joystick [NES]

1. 根據http://iamjustinwang.blogspot.tw/2016/10/stm32f429-nintendo-entertainment.html這一篇把joystick的部份加上去, 而joystick的部份是使用adc的方式.

2. Test Video:


3. Test Code: (Keil-MDK v5.20)
    STM32F429_Disco_NES_With_ADC_JoyStick_V0.2

4. Joystick:
    本範例是使用JoyStick Shield V1.A, 最特殊的是在於可以支援3V/5V切換.
5. GPIO Setting:

  • PF8:  joystick x.
  • PF9: joystick y.
  • PC11: key1.
  • PC12: key2.
  • PC13: key3.






2016年10月26日 星期三

STM32F429 Nintendo Entertainment Simulator [NES]

1. 趁著週末也將Nintendo Entertainment System順利移植到STM32F429上面了, 目前還欠缺Joystick的驅動, 這部分等購入後再補上.

2. 目前程式中是先設定預載2個遊戲, 分別是超級瑪莉和影子傳說, 路徑在nes\games\底下.


3. 一樣是採用INCBIN的方式將遊戲直接載入到開發板上, 省去程式和遊戲分開燒錄的手續, 或是將遊戲轉成Hex Array的手續.


4. 切換遊戲目前是使用define去切換, 只要去stm32f429i_discovery.h中修改GameSelect即可切換.


5. Test Video:

  • Super Mario:


  • YingZiChuanShuo:


6. Test Code: (IDE Tool: Keil-MDK v5.20)

    STM32F429_Disco_NES_V0.5

2016年10月12日 星期三

STM32F429 SEGA Master System Simulator with Joystick [SMS]

1. 趁著3天連假, 把SEGA Master System Simulator的程式加上了USB Host和Joystick的部份, 如此一來就可以使用Joystick來執行遊戲, 而不是用很難使用的Touch Screen.

2. 測試影片如下:

3. 主要修改的部份如下:

  • 使用INCBIN將遊戲檔案直接導入, 不需另外透過其它工具將遊戲燒入Flash.



  • 使用Joystick取代Touch Screen的操作, 讓操作更加方便, Joystick是透過USB Host的方式加入程式中.



  • Joystick的鍵值是在UpdateController function中去判斷, 若更換不同的Joystick, 則此程式需要客製化修改.



4: Joystick Information: ( Logitech F710 2.4G )
 

5. Test Code Download link: (IDE: Keil-MDK V5.20)
    STM32F429_DiscoveryBoard_SMS_EMU_JoyStick_Logitech_F710

6. 本測試程式中的遊戲僅供教育用途,請勿使用於商業用途.


2016年9月25日 星期日

STM32F429 SEGA Master System Simulator [SMS]

1. 趁著週末做了一個小實驗, 就是將模擬器放在STM32F429 Discovery Board去執行看看, 由於已經有許多網路神人已經提供了許多範例和資料, 因此測試起來進度挺順利的.

2. 目前網路上的程式大致上除了主程式外, 遊戲的bin檔案皆須使用ST-LINK Utility Tool燒錄到指定的Flash Address, 在使用上比較麻煩一點, 因此我特定改良了這一點, 將bin檔案直接就跟程式可以一起燒錄進去開發板.

3. Test Video:


4. Test Code Download Link: (Keil-MDK v4.74 or v5.20)
    STM32F429_SMS_EMU_Code

5. 將bin檔直接與程式綁定在一起的做法是透過.s檔案和組合語言, 使用INCBIN這個指令直接將bin檔案直接載入, 並透過extern的方式分享資料和檔案長度.




6. 隨程式提供的bin檔案, 僅供測試使用, 測試完畢後, 請趕快刪除, 並不得用在商業行為上.

2016年9月18日 星期日

STM32F103_USB_Test_Code(VCP/HID/MSC)

1. STM32F103大概是在還沒接觸M4之前, 最常用的ST MCU, 即便是到了現在還是有許多人在使用這一顆Cortex-M3, 那今天要介紹的是STM32F103 USB Code.

2. 本範例主要是在STM32F103上面移植Virtual COM-Port(VCP) , Keyboard/Mouse/HID RAW(HID) , Mass Storage(MSC)這三種比較常用的類型.

3. 由於STM32F103並沒有類似像Discovery Board這種板子, 因此本範例的GPIO Define如下, 請參考的人自行根據自己手上的板子來修改.





4. How to switch VCP/HID/MSC mode: (usb_select.h, default is MSC mode)


5. Main flow:


  • GPIO & RAM-Disk(8KB) Init.
  • Disconnect USB-Pull up(PA8).
  • I2C Init.
  • USB Init.
  • Systick Init.
  • Connect USB-Pull up(PA8).
  • Check Button Status, if press the button, run HID or VCP test code.
  • It will run SCSI command when switch to MSC mode.
6. How to adjust RAM-Disk Size: (mass_mal.c)


7. Test flow:
  • MSC mode:



  • VCP mode:



  • HID mode:

    • Keyboard: 


    • Mouse: 

    • HID RAW: 


8. Test Code Download Link:

    




2016年7月29日 星期五

[Qt] STM32F401 USB-HID Test with Qt

1. 延續之前的STM32F401/411 USB-Device HID Test(Control in/out & Interrupt in/out) 這篇測試
    所進行的延伸, 最大的差別在於之前測試時使用Bus Hound下命令去控制LED On/Off和接收
    Device上傳的資料, 而現在則改用Qt所寫的視窗程式來進行測試.

2. Test Video:
   

3. Test Code Link:



4. Tool Link:



5. To be continued......


2016年7月10日 星期日

STM32F401/411 USB-Device HID Test(Control in/out & Interrupt in/out)

1. 本篇是基於STM32F401/411 HID Test(Keyboard + Mouse + HidRaw)這篇文章, 繼續探討HID雙向溝通的測試方式.

2. 範例程式下載連結: (使用IAR EWARM v7.7)
    stm32f401_411_usb_device_hid_test_2016

============================= interrupt in/out =============================
3. 由於之前的範例僅有mcu to pc(interrupt in)的這個部份, 因此首先我們要先補上pc to mcu(interrupt out)的這個部份.

  • 先到usbd_hid_core.c去新增相關function.

  • 宣告USBD_HID_DataOut function.

  • 將USBD_HID_DataOut 加入 callback function.
  • 將Endpoints由原先定義的1個改為2個.

  • 新增endpoint out的描述.


  • 由於新增了endpoint out的描述, 因此需要加上endpoint out描述的length.

  • 目前程式定義pc to mcu的data length為8bytes.


  • 將程式燒進去後, 我們便可以開啟bus hound來進行測試, 當程式成功執行且與pc連結後, 應該會在bus hound上看到如下顯示的畫面, 此時我們選擇最上層的USB輸入裝置, 並double click它.


  • 此時我們選擇endpont 1裡面的interrupt out端點, 接著將Data Length修改為8, 並在底下data的區域中輸入與畫面相同的資料, 且依照1 - 2 - 3 - 4的步驟執行..

  • 此時應該已經看到LED3已經開始亮起.

  • 我們可以從USBD_HID_DataOut裡面看到, 當接收完pc傳來的8bytes後, 程式便開始判斷要對哪一個LED執行on/off function, 其中我們目前只有用到Report_buf[0] 和 Report_buf[1]而已, 分別代表的意義如下:
         Report_buf[0]:  LED number
         Report_buf[1]:  On/Off
         Report_buf[2]~Report_buf[7]:  Reserve


  • interrupt in/out 的bus hound操作圖.
    • 當按下user button後, 就會開始透過interrupt in的端點來傳送資料給pc, 接著pc透過interrupt out去開啟/關閉LED3.


============================= control in/out =============================
4. 除了使用EP-1 interrupt in/out外, 還可以使用EP-0 control in/out這個方式來與 pc之間溝通, 因此首先我們要補上control in/out的程式.
  • 先對EP0所需使用的變數與程式進行宣告.
  • 將EP0的程式加到call back function.
  • 接著在USBD_HID_Setup function內, 加入set report和get report這2個command.

  • 接著完成EP0_RxReady和EP0_TxSent這兩個function.

  • control out(set report command) flow:
    • USBD_HID_Setup function => case HID_REQ_SET_REPORT => USBD_HID_EP0_RxReady function
  • control in(get report command) flow:
    • USBD_HID_Setup function => case HID_REQ_GET_REPORT => USBD_HID_EP0_TxSent function
  • pc to mcu測試方式與interrupt out相同, 將程式燒入後, 使用bus hound打開裝置後, 對EP0 Control double click, 接著再輸入指令(set report),  則可以開啟/關閉LED.
  • mcu to pc測試方式則如下所示, 按下列步驟操作則可以讀到預設的資料.

  • control in/out 的bus hound操作圖.
    • 使用set report command讓pc傳送資料給mcu來開啟/關閉LED, 接著pc再透過get report command去讀取資料.