---
# System prepended metadata

title: STM32環境建立
tags: [封存]

---

# STM32環境建立

## 開發版
[NUCLEO-H755ZI-Q , NUH755ZIQ$AT3](https://www.st.com/resource/en/data_brief/nucleo-f207zg.pdf)

![image](https://hackmd.io/_uploads/rJI4-kKRkx.png)
## 環境建立:
## 下載
1. [STM32 CubeMX](https://www.st.com/en/development-tools/stm32cubemx.html)，必須使用此來預生成IP板子的Init code。
2. [Keil MDK](https://developer.arm.com/Tools%20and%20Software/Keil%20MDK)，強大的IDE，比STM32IDE使用上更直觀。
3. [STM32 Programmer](https://www.st.com/en/development-tools/stm32cubeprog.html)，處理板子死機時需要用。
## 安裝完成，處理版上的Firmware

0. 正常在安裝Programmer時會自動安裝ST-Link的Driver，如未安裝可到[此處](https://www.st.com/en/development-tools/stsw-link009.html)
1. 使用USB連接板子與電腦，開啟Programmer
![image](https://hackmd.io/_uploads/rJ0TzyK0yx.png)
2. 選擇你的Debug平台，正常的情況都是ST-Link。
![image](https://hackmd.io/_uploads/SyQx4yFAye.png)
3. 如果Driver有正常安裝，按下掃描後應該能看到Serial number或開啟裝置管理員，可以看到
![image](https://hackmd.io/_uploads/rJyUE1FRyl.png)

![image](https://hackmd.io/_uploads/BJJXV1FCye.png)
4. **不用按下Connect** 直接點右下角Firmwave upgrade
5. 
![image](https://hackmd.io/_uploads/S1B6NktRJx.png)
6. 按下去等他跑即可。
![image](https://hackmd.io/_uploads/rkumHJtRJg.png)

## 處理KEIL
0. 直接打開
1. 找到 ![image](https://hackmd.io/_uploads/S1v6ByKA1x.png)
通常會當機一小段時間，正常現象。
2. 搜尋板子型號
![image](https://hackmd.io/_uploads/HJpgLkFRke.png)
3. ![image](https://hackmd.io/_uploads/S1SEIJtCkx.png)
安裝Device Specific的包。



## STM32 CubeMX
1. 建立專案
![image](https://hackmd.io/_uploads/B13DP1tAyx.png)
2. 選板子，本例使用NUCLEO-H755ZI-Q
![image](https://hackmd.io/_uploads/HykeYyKCkl.png)
設定RCC中的HSE與LSE，**非常重要，沒設定板子會變磚頭**
![image](https://hackmd.io/_uploads/r1tkq1KAJl.png)
3. 設定編譯器
![image](https://hackmd.io/_uploads/ByC9yJnRJl.png)
4. 右上角生成Code
![image](https://hackmd.io/_uploads/BJM6y13C1l.png)

## Keil開啟專案

1. 設定專案編譯器及DEBUG設定:
![image](https://hackmd.io/_uploads/HkAbl13RJx.png)

2. Target
![image](https://hackmd.io/_uploads/r1sNe12CJx.png)
MicroLIB要開，未來才有辦法用Printf來deBUG。
3. DEBUG
![image](https://hackmd.io/_uploads/rk3tgknRJl.png)
確定自己的Debugger版本
![image](https://hackmd.io/_uploads/BJg2l1201e.png)

![image](https://hackmd.io/_uploads/SkNgbynCkl.png)
正常的單核板子要用Erase Full Chip免得夜長夢多，**但本例是多核板，請使用 Erase sections即可**。

如果Description沒東西存在時需手動增加對應板子的設定值。
或直接reset設定至default，正常情況會自己設定好。




## 常見問題

### 雙核心需要燒入兩份code
預設使用M7作為主核心，它會等待M4回應。
若在CubeMX有起用M4但沒有燒入Code則會因M4未回應而time out進入HAL ERROR。
節錄自M7/main.c
```= c
while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
  if ( timeout < 0 )
  {
  Error_Handler();
  }
```
解法有三：
1. 直接在CubeMx把M4關閉(無法達成，但可以關閉M4的CLK)
2. 正常燒入M4的code。
3. 將M7確認M4回應的部分（上述程式碼）註解掉。

### 無法燒入與ST-LINK無法連線(板子變磚頭)
發生原因 : CubeMX時脈配置錯誤等。
解法 : 短路板子的BOOT0與3.3V，連接至STM32 Programer並抹除全部的Flash。