手上有塊nucleo stm32l053x板子,用來做串列埠實驗,看了下st的最新庫hal驅動,於是想用hal驅動來做串列埠。
使用過程中發現只能傳送資料不能接收資料,用邏輯分析儀檢視rx,tx引角,都有資料,但就是收不到資料。
使用stm32f103傳統驅動,一點問題沒有,改到hal怎麼就不行了呢?經過一周的除錯終於找到了問題所在.
首先看stm32f103傳通驅動的**:
/** usart1 gpio configuration
pa9 ------> usart1_tx
pa10 ------> usart1_rx
*//*configure gpio pin : pa
*/gpio_initstruct.gpio_pin =gpio_pin_9;
gpio_initstruct.gpio_mode =gpio_mode_af_pp;
gpio_initstruct.gpio_speed =gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstruct);
/*configure gpio pin : pa
*/gpio_initstruct.gpio_pin =gpio_pin_10;
gpio_initstruct.gpio_mode =gpio_mode_in_floating;
gpio_init(gpioa, &gpio_initstruct);
在傳通驅動下我們配置io的時候,
對於tx 我們配置gpio_mode為gpio_mode_af_pp,
對於rx我們配置gpio_mode為gpio_mode_in_floating。
有時候人有慣性思維認為理所應當的在hal裡也應該一樣,我就是在這個地方栽了跟頭。
在hal驅動方式裡,rx,tx 必須都配置成gpio_mode_af_pp。
**如下:用hal驅動時
/**usart2 gpio configuration
pa2 ------> usart2_tx
pa3 ------> usart2_rx
*/gpio_initstruct.pin =gpio_pin_2;
gpio_initstruct.mode =gpio_mode_af_pp;
gpio_initstruct.pull =gpio_nopull;
gpio_initstruct.speed =gpio_speed_fast;
gpio_initstruct.alternate =gpio_af4_usart2;
hal_gpio_init(gpioa, &gpio_initstruct);
gpio_initstruct.pin =gpio_pin_3;
//gpio_initstruct.mode = gpio_mode_input;(這句千萬不能要)
gpio_initstruct.alternate =gpio_af4_usart2;
hal_gpio_init(gpioa, &gpio_initstruct);
希望能給後面的人提供點經驗,少走彎路。
串列埠驅動程式設計
在linux系統中,終端是一類字元型裝置,它包括多種型別,通常使用tty來簡稱各種型別的終端裝置。主要包括以下幾種 串列埠終端 dev ttys 串列埠終端是使用計算機串列埠連線的終端裝置。linux把每個串列埠都看作是乙個字元裝置。這些串列埠所對應的裝置名稱是 dev ttysac0 dev tt...
tty串列埠驅動程式設計
在linux系統中,終端是一類字元型裝置,它包括多種型別,通常使用tty來簡稱各種型別的終端裝置。1 串列埠中斷 dev ttys 2 控制台終端 dev console 3 虛擬終端 dev tty 控制台 供核心使用的終端為控制台。控制台在linux啟動時,通過命令console 指定,如果沒有...
常見的程式設計陷阱
原資料來自 1.public class privateoverride public static void main string args class derivedclass extends privateoverride 輸出結果為 private f 分析 private方法被自動認為是...