2013年4月22日 星期一

作業系統之前的程式 for stm32f4discovery (3) - usart

the 1st 2013422 (1)
the 2nd 20160922

經過 3 年, 我終於知道有哪些還沒搞懂, 趕緊補上。

fig 1

fig 2
fig 3
fig 4
fig 5
選用 usart2 可以使用哪些 pin 呢? 參閱 fig 2 可以使用 PA2 (TX), PA3 (RX), PD5(TX), PD6 (RX) 也可以。PA2, PA3 參考 fig 1 是接在 AHB1, 這就是 myur.c L371 為什麼要初始化 AHB1 的原因。而 usart2 參考 fig5 得知要初始化 APB1 (myur.c L374)。

myur.c
367 void init_usart(uint32_t baudrate)
368 {
369  
370  /* GPIOA clock enable */
371  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
372  
373  /* enable peripheral clock for USART2 */
374  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);


TTL 線接法 (fig 6)


版子端           |    TTL 線
PA2 (usart TX)  |    RX (白色)
PA3 (usart RX)  |    TX (綠色)


fig 6

usart 是很重要的輸入/輸出功能, stm32f4discovery 有好幾組 usart, 這範例選用了 usart2 這組, 接腳是 PA2, PA3, 另外的 gnd, 5v 用, 可接可不接。

感謝 JuluOSDev 陳?毅補充:
「VCC 不需要接 但是 GND 需要接的 不接的話叫作 floating 兩邊的電位不見得相同可能會有奇怪現象, GND相接, 共地才會有一個正確的參考電位平面!」



整條線長這樣, fea 提供了這個方法, 減輕了硬體工作負擔, 要一個純軟體開發人員, 去焊一個 uart 出來, 實在有點困難。插上 pc 的 usb 端之後, 當然沒搞定, 還有 usart code 要寫。



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 印東西了。



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

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。