---
# System prepended metadata

title: STM32F429ZI-disco1
tags: [stm32]

---

STM32F429ZI-disco1
===
###### tags: `stm32`
## Toolchain

(以 Ubuntu Linux 作為開發平台)
 
由於 ABI 採用 hardfp，需要有對應的 GNU Toolchain，可直接使用 Ubuntu 的 gcc-arm-none-eabi :

  sudo apt-get install gcc-arm-none-eabi

若因為 Ubuntu 版本較舊，而找不到 apt 來源而致使前一命令失敗的話，改為以下操作:

- sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
- sudo apt-get update
- sudo apt-get install gcc-arm-none-eabi
- 針對 Ubuntu 14.04，執行以下指令：
    sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
    sudo apt-get install gcc-arm-none-eabi=4-8-2014q2-0trusty10
    sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
    sudo apt-get update
    sudo apt-get install gcc-arm-none-eabi=4.9.3.2015q3-1trusty1

或是直接下載 prebuilt package，然後解壓縮放到自己習慣的目錄下，如 $HOME/STM32/toolchain，一個名為 envsetup.sh   的bash script 可協助您設定環境變數

    #!/bin/bash
    echo “setting build environment for STM32F4″
    export STM32_PATH=$HOME/STM32
    export PATH=$STM32_PATH/toolchain/gcc-arm-none-eabi-4_8-2013q4/bin/:$STM32_PATH/toolkit/bin:$PATH

確保使用 Ubuntu 的 toolchain: (請將下方的 /usr/bin 字串改為下載 toolchain 所解開後的目錄)

- env | grep ^PATH
- which arm-none-eabi-gcc

參考輸出為 /usr/bin/arm-none-eabi-gcc
 
 

### 安裝 st-link 工具
- 為避免無謂的版本問題，請不要用 Debian/Ubuntu 內建的套件，一律從原始程式碼編譯並安裝
    sudo apt-get install automake* libtool libusb-1.0-0-dev
    git clone http://github.com/texane/stlink.git
    cd stlink
    ./autogen.sh 
    ./configure --prefix=/usr
    make
    sudo make install
    sudo cp 49-stlinkv2.rules /etc/udev/rules.d/

 
 

### 安裝 OpenOCD
- 不要用 Debian/Ubuntu 內建的套件，需要從 Git 取得最新程式碼並編譯
- 操作方式：
    sudo apt-get install texi2html texinfo
    git clone git://git.code.sf.net/p/openocd/code openocd
    cd openocd
    ./bootstrap
    ./configure --prefix=/usr --enable-stlink
    make
    sudo make install

 
 

更新/還原 ST 展示韌體程式碼

操作方式：

- 確認 STM32F429I-Discovery_FW_V1.0.1 已下載: http://www.st.com/web/en/catalog/tools/PF259429
- unzip stsw-stm32138.zip
- 確認已正確設定 Toolchain 的 $PATH 環境變數
- arm-none-eabi-objcopy -I ihex -O binary `find -name STM32F429I-DISCOVERY_Demo_V1.0.1.hex` /tmp/out.bin
- st-flash write /tmp/out.bin 0x8000000

 
 

燒錄示範韌體

操作方式：

- 確認前述 st-link, openocd 以及 Toolchain 均已正確安裝和設定
- git clone https://github.com/jserv/stm32f429-demos.git
- cd stm32f429-demos
- make list

應該可見若干韌體清單，以 Paint 為例，可透過以下命令燒錄到 STM32F429 Discovery 中：

- make flash-Paint

其他展示: (以下任選一個)

- make flash-TouchGFX-demo2014
- make flash-STM32CubeDemo_STM32F429I-Discovery
- make flash-STM32F429I-DISCOVERY_Demo_V1.0.1

 

Tip:  遇到無法透過 openocd 燒錄韌體怎麼辦？

可以透過前述 stm32f429-demos，然後執行

- make flash-STM32CubeDemo_STM32F429I-Discovery

重新燒錄 flash 即可

示範專案：簡單的 3D rendering 程式

操作方式：

- 確認 STM32F429I-Discovery_FW_V1.0.1 已下載: http://www.st.com/web/en/catalog/tools/PF259429
- unzip stsw-stm32138.zip
- git clone https://github.com/jserv/stm32f429-r3d
- cd stm32f429-r3d
- make

確保新版 stlink 或 OpenOCD 已正確安裝後，建議使用 git 版本 (OpenOCD 安裝方式請見後方)

- make flash

有時得重複此操作，才會正確燒錄
 
若看到畫面一片白，可按下 RESET 按鈕，稍候即可見到茶壺，此時順勢晃動開發板，可見茶壺隨著轉動。接著按下 USER 按鈕 (藍色)，會切換到不同的 3D model

![](https://hackpad-attachments.imgix.net/hackpad.com_WbiooOfkaoR_p.111731_1391128610542_teapot.jpg?fit=max&w=882)


 
 

示範專案：USART 測試程式

簡單測試 USB TTL Cable 與 STM32F429 Discovery Board 的連接。
 
選 PA9/PA10 腳位 (USART1 RXD/TXD) 做測試的原因:
從 32F429I Discovery 的 user manual 得知這兩個腳位是 free 的，過去在 STM32F4 Discovery 選用的 PA0/PA1 腳位 (USART4)， 在 STM32F429 Discovery 上都另有用途 (user button, MEMS-INT1)
 
 操作方式：

- git clone https://github.com/KunYi/stm32F429-usart1.git
- cd stm32F429-usart1
- make clean all
- make flash
- 接線只需要3 pin (建議翻面)
  - PA9 (USART1_TX) 接白線
  - PA10 (USART1_RX) 接綠線
  - Discovery 上的 GND 接黑線
![](https://hackpad-attachments.imgix.net/hackpad.com_WbiooOfkaoR_p.111731_1391954648987_lines.jpg?fit=max&w=882)


 安裝 GNU screen 來操作 ttyUSB

   sudo apt-get install screen

 
操作方式:

- 先確認 ttyUSB 裝置正確建立: ls /dev/ttyUSB*
  - 範例: attach the device ttyUSB0
-  screen /dev/ttyUSB0 115200 8n1
  - 執行此命令之前，應該確定你使用的帳號已加入到 dialout  群組，否則無法正確開啟 /dev/ttyUSB? 裝置
  - 參考 Howto: Linux Add User To Group 
- 按下版子上的 RESET 按鈕 (黑色)
- 當要離開，按組合鍵 CTRL+a 之後再按 k

 
參考執行畫面:

  [Open /dev/ttyUSB0]
  Hello World!
  Just for STM32F429I Discovery verify USART1 with USB TTL Cable

 
 

問題排除

無法透過 stlink 正確燒錄:

  st-flash write r3d.bin 0x8000000
  2014-01-30T11:46:56 INFO src/stlink-common.c: Loading device parameters....
  2014-01-30T11:46:56 WARN src/stlink-common.c: unknown chip id! 0x10036419
  stlink_sram_flash() == -1
  make: *** [flash] Error 255

 
表示 stlink 軟體太舊，請自 github 更新 並安裝。請確認 which st-flash 的結果正確指向新版的 stlink。在 Ubuntu 下用 stlink，記得要把 49-stlinkv2.rules 檔案複製到 /etc/udev/rules.d/ 目錄下
 
改用 STlink GUI 也可燒錄，執行畫面如下：

![](https://hackpad-attachments.imgix.net/hackpad.com_WbiooOfkaoR_p.111731_1391624616351_stlink.png?fit=max&w=882)


 
    

使用 OpenOCD 燒錄 (流程)

確保版本 > 0.7.0

- 不要用 Debian/Ubuntu 內建的套件
- openocd --version
- 預期類似以下：
    Open On-Chip Debugger 0.8.0-dev-00432-gdba153b (2014-03-29-18:18)

執行

  openocd -f stm32f429discovery.cfg

參考輸出畫面

  Info : This adapter doesn't support configurable speed
  Info : STLINK v2 JTAG v17 API v2 SWIM v0 VID 0x0483 PID 0x3748
  Info : using stlink api v2
  Info : Target voltage: 2.873814
  Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
  在其他終端機 視窗執行:
  telnet localhost 4444

(按下 Ctrl-]  再按 q 鍵可離開 telnet 畫面)
 
以下參考畫面和指令  (粗體部份; 過程中留意到板子左上方的燈號會持續閃著)
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> init
> reset init
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
> halt
> flash write_image erase /full_path/r3d.elf
auto erase enabled
device id = 0x10036419
flash size = 2048kbytes
target state: halted
target halted due to breakpoint, current mode: Thread 
xPSR: 0x61000000 pc: 0x20000042 msp: 0xfffffffc
wrote 524288 bopenocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg -c "init" -c "reset init" -c "halt" -c "flash write_image erase $IMG" -c "verify_image $IMG" -c "reset run" -c shutdownytes from file /full_path/r3d.bin in 20.244406s (25.291 KiB/s)
> verify_image /full_path/r3d.elf
target state: halted
target halted due to breakpoint, current mode: Handler HardFault
xPSR: 0x61000003 pc: 0x2000002e msp: 0x2002fc70
target state: halted
target halted due to breakpoint, current mode: Handler HardFault
xPSR: 0x61000003 pc: 0x2000002e msp: 0x2002fc70
verified 450192 bytes in 0.326716s (1345.635 KiB/s)
> reset run
> 
https://docs.google.com/document/d/1Ygl6cEGPXUffhTJE0K6B8zEtGmIuIdCjlZBkFlijUaE/edit

https://www.ptt.cc/bbs/ASM/M.1502383786.A.47C.html
http://descent-incoming.blogspot.tw/2016/04/books-stm32f4.html

## stm32 qemu函式庫not found問題
```
libtinfow.so.6 -> /lib/x86_64-linux-gnu/libtinfo.so.5
libncursesw.so.6 -> /lib/x86_64-linux-gnu/libncursesw.so.5
```
編譯時需要加入disable werror的flag
```
./configure --disable-werror
```

## pin Legend
![image](https://hackmd.io/_uploads/rk5AHJPJWe.png)

![image](https://hackmd.io/_uploads/Hyn7HJDk-g.png)

![disco_f429zi_2017-07-25_slide2](https://hackmd.io/_uploads/HJ8cHJv1bl.png)

![image](https://hackmd.io/_uploads/rJd4ryDyZl.png)

from: https://os.mbed.com/platforms/ST-Discovery-F429ZI/
