---
# System prepended metadata

title: STM32筆記

---

# STM32筆記
把一些曾經卡很久的錯記錄下來

- 用printf()沒重寫fputc()程式會卡住
- NUCLEO-L053R8的開發版RCC若使用HSE，會是預設8MHz的1/2，所以UART的Baud Rate也會是原來的1/2
- I2C的Address要在最後加上R/W
- RTC使用`GetTime()`前要先`GetDate()`，數值才會更新
![](https://i.imgur.com/6LJ1Yv8.png)
https://www.st.com/resource/en/user_manual/dm00113898-description-of-stm32l0-hal-and-low-layer-drivers-stmicroelectronics.pdf
- 中斷Callback函數裡若要使用`HAL_Delay()`，要設定中斷的優先順序
![](https://i.imgur.com/tvuqTWZ.png)
兩個中斷的優先權不能一樣 基本上System tick timer 要優先於(數值小於)其他中斷

- `printf()` + USART keil的編譯Target要選擇MicroLIB，應該說是`printf()`要做重新導向就要
https://blog.csdn.net/DDTS_ZD/article/details/124334348

- ADC 沒事Prescaler設定一下吧，太快會出事
RTC setTime的結果很奇怪，結果發現是ADC用DMA的問題??
還有sample time 的 cycles數也可以設多一點
- Callback function 的執行時間太長，觸發又太快，可能導致都在跑他
例如Timer Callback 裡面有delay 4ms 但觸發頻率大於250Hz

- ~~原來`HAL_GPIO_WritePin()`的`PinState`只能給0 or 1，不然assert會失敗...~~
> 沒事 是我在搞笑 有上拉請記得設Output Drain
USE_FULL_ASSERT 在 hal_config
- ![](https://hackmd.io/_uploads/rJKXZcEp3.png)
