//串列埠問題對於乙個菜鳥來說,太重要了。學會看手冊好重要 !
stm32上有很多i/o口,也有很多的內建外設想i2c,adc,isp,usart等 ,為了節省引出管腳,這些內建外設基本上是與i/o口共用管腳的,也就是i/o管腳的復用功能。但是stm32還有一特別之處就是:很多復用內建的外設的i/o引腳可以通過重對映功能,從不同的i/o管腳引出,即復用功能的引腳是可通過程式改變的。知道了這些我們就不難理解上面**的意思了,程式中用到的usart2外設的tx,rx分別對應pa2,pa3,但是我的學習板上的pa2,pa3引腳接了其他裝置,但是為了還要用usart2,
「rcc_apb2periph_gpiod |rcc_apb2periph_afio」就開啟了gpiod重對映功能
把usart2裝置的tx,rx對映到pd5,pd6上,我們在這兩個引腳上接上max232串列埠晶元就可以使用usart2串列埠通訊了。那為看官該問:「usart2是不是可以對映到任意管腳呢?」答案是否定的,它只能對映到固定的管腳,下圖是usart2重對映表
串列埠引腳圖:
部分**:
/* configure usart2 rx (pa3) as input floating */
gpio_pinremapconfig(gpio_remap_usart2, enable);//使能gpio埠對映usart2
gpio_initstructure.gpio_pin = gpio_pin_6;
gpio_initstructure.gpio_mode = gpio_mode_in_floating;
gpio_init(gpiod, &gpio_initstructure);
/* configure usart2 tx (pa2) as alternate function push-pull */
gpio_initstructure.gpio_pin = gpio_pin_5;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;
gpio_init(gpiod, &gpio_initstructure);
對映:
rcc_apb2periphclockcmd(rcc_apb2periph_gpiod | rcc_apb2periph_afio,enable);
中斷收發資料:
void usart2_irqhandler(void)
/這個東西害我好久,記錄備忘!!!// STM32串列埠收發
串列埠初始化 使能串列埠 使能中斷 傳送資料 接收資料 獲取狀態標誌位 清除狀態標誌位 獲取中斷狀態標誌位 清除中斷狀態標誌位 define usart rec len 200 定義最大接收位元組數 200 define en usart1 rx 1 使能 1 禁止 0 串列埠1接收 extern ...
STM32 二 串列埠收發
使用485介面接收資料,然後返回接收的資料。usart configuration while 1 2.1.usart configuration 開起時鐘 io口時鐘 串列埠開時鐘 開啟復用時鐘 復用設定 中斷初始化 io輸入輸出設定 485共有3個引腳,收發控制引腳 預設為收 收引腳,發引腳。串...
stm32串列埠通訊
通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...