usart 是很重要的輸入/輸出功能, stm32f4discovery 有好幾組 usart, 這範例選用了 usart2 這組, 接腳是 PA2, PA3, 另外的 gnd, 5v 用, 可接可不接。
感謝 JuluOSDev 陳?毅補充:
「VCC 不需要接 但是 GND 需要接的 不接的話叫作 floating 兩邊的電位不見得相同可能會有奇怪現象, GND相接, 共地才會有一個正確的參考電位平面!」
整條線長這樣, fea 提供了這個方法, 減輕了硬體工作負擔, 一個純軟體開發人員, 去焊一個 uart 出來, 實在有點困難。插上 pc 的 usb 端之後, 當然沒搞定, 還有 usart code 要寫。
![](https://i-blog.csdnimg.cn/blog_migrate/e887ddc1a1c1b83c6676318d7d7fe4a2.jpeg)
45 NT 參加 團購購得, 20130406 拿到, 上圖是接腳圖示。
PA2: usart2_tx -> 白色線 (rx)
PA3: usart2_rx -> 綠色線 (tx)
PA2, PA3 定義請參考: UM1472 User Manual STM32F4DISCOVERY STM32F4 high-performance discovery board 4.11
我為 uart 困擾很久, 不知道怎麼處理, 本想使用 usb cdc, 不過 usb code 實在複雜, 現在有此方案, usart code 也相對容易些, 總算可以在 stm32f4discovery 印東西了。
![](https://lh6.googleusercontent.com/-o7P_rtWw7wY/UWPcZOru62I/AAAAAAAAltE/03uZ3G27HtI/s800/stm32f4_af.jpeg)
alternate function register 稍微提一下, 我也不確定是不是這樣, 看不懂 datasheet 的內容。uart2 rx/tx 是 AF7, PA2, PA3 的 2, 3 是屬於 0..7 所以要設定 0x20 (GPIO alternate function low register) 這組暫存器。
Bits 31:0 AFRLy: Alternate function selection for port x bit y (y = 0..7)
These bits are written by software to configure alternate function I/Os
AFRLy selection:
0000: AF0
0001: AF1
0010: AF2
0011: AF3
0100: AF4
0101: AF5
0110: AF6
0111: AF7
1000: AF8
1001: AF9
1010: AF10
1011: AF11
1100: AF12
1101: AF13
1110: AF14
1111: AF15
AF7 的值是 0111, 也就是 0x7, 所以設定 GPIO alternate function low register。
PA2: 8-11 為 0x7
PA3: 12-15 為 0x7
就是 GPIO_PinAFConfig() 做的設定。
除此之外 source code 沒什麼好介紹的, 從 fea 的版本小改而來 (另外參考網路上抓的 ur 程式碼), 使用 polling mode, 再從 st library 複製/貼上。這程式的價值在於, 我縮到只有一個 .c 檔, 方便對照 datasheet 查閱, 不用和整個 library 奮戰。
source code:
https://github.com/descent/stm32f4_prog
myur.c
make myur.bin
這系列暫時先這樣, 有了基本的 uart 輸入/輸出, 又有了 led, 應該有足夠的武器開工了。
20130425 補充:
由於我的無知, 這個 ur 程式有一個致命的缺點, 我沒有設定 cpu 的工作時脈, 所以 cpu 運作在 16000000 下, 而當我將 cpu 時脈設為 168000000 時, 此 ur 程式無法正常工作, 除錯中 ...
不介意這點的話, 勉強可用。
20130510 補充:
This version can work on 168M HZ cpu clock.
source code:
https://github.com/descent/stm32f4_prog/tree/master/myur_168M