STM32串列埠的部分對映與完全對映

2021-08-25 05:51:20 字數 2860 閱讀 5078

覺得不錯分享給大家,學習!

以stm32的usart1來舉例

預設使用的是pa9為tx,pa10為rx,當需要開啟復用功能時,需要注意修改以下幾個地方的**

1 時鐘的開啟

當使用復用功能後,就需要開啟復用時鐘rcc_apb2periph_afio

2 初始化引腳的不同,原來的是pa9,pa10,但是現在要初始化pb6,pb7,這一部分就不貼**了。

3 呼叫gpio_pinremapconfig()函式

gpio_pinremapconfig(gpio_remap_usart1,enable);  

usart1的重對映開啟

注意:gpio_pinremapconfig()函式的引數是不能隨便寫的,在《stm32韌體庫使用手冊》裡面給出了可用引數的列表

gpio_pinremapconfig(gpio_fullremap_usart3, enable); //usart3的復用功能完全重對映

gpio_pinremapconfig(gpio_partialremap_usart3, enable); //usart3的部分重對映

部分重對映和完全重對映有什麼區別那?在網上我也沒找到確定的答案,但是建議開啟完全重對映,因為網上有資料說部分重對映在傳送訊息時候不正常(我自己沒有做實驗)

還需要注意,在開啟重對映功能之前一定要先檢視一下自己的微控制器是否支援重對映功能。

附:初始化串列埠的程式

void usart1_config(void)  

gpio_inittypedef gpio_initstructure;  

usart_inittypedef usart_initstructure;  

/* config usart1 clock */  

rcc_apb2periphclockcmd(rcc_apb2periph_usart1 | rcc_apb2periph_gpiob|rcc_apb2periph_afio, enable);  

/* usart1 gpio config */  

gpio_initstructure.gpio_pin = gpio_pin_6;  

gpio_initstructure.gpio_mode = gpio_mode_af_pp;  

gpio_initstructure.gpio_speed = gpio_speed_50mhz;  

gpio_init(gpiob, &gpio_initstructure);  

gpio_initstructure.gpio_pin = gpio_pin_7;  

gpio_initstructure.gpio_mode = gpio_mode_in_floating;  

gpio_init(gpiob, &gpio_initstructure);  

gpio_pinremapconfig(gpio_remap_usart1,enable);  

//gpio_afiodeinit();  

/* usart1 mode config */  

usart_initstructure.usart_baudrate = 115200;  

usart_initstructure.usart_wordlength = usart_wordlength_8b;  

usart_initstructure.usart_stopbits = usart_stopbits_1;  

usart_initstructure.usart_parity = usart_parity_no ;  

usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;  

usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;  

usart_init(usart1, &usart_initstructure);   

usart_cmd(usart1, enable);  

重對映步驟為:

1.開啟重對映時鐘和usart重對映後的i/o口引腳時鐘, 

rcc_apb2periphclockcmd(rcc_apb2periph_gpiob | rcc_apb2periph_afio,enable);

2.i/o口重對映開啟.

gpio_pinremapconfig(gpio_remap_usart1,enable);

3.配製重對映引腳, 這裡只需配置重對映後的i/o,原來的不需要去配置.

gpio_initstructure.gpio_pin = gpio_pin_6;

gpio_initstructure.gpio_mode = gpio_mode_af_pp;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_init(gpiob, &gpio_initstructure);

gpio_initstructure.gpio_pin = gpio_pin_7;

gpio_initstructure.gpio_mode = gpio_mode_in_floating;

gpio_init(gpiob, &gpio_initstructure);

只需要這三步

簡單的說 stm32的 io 有3個功能 乙個是預設的 乙個是復用 乙個是重對映功能(這個其實也屬於復用)

如果配置成復用 則將使用第2個功能 如果配置成復用 同時 相應的重對映配置了 則將使用第3個功能

通常乙個口的 復用+重對映有好多 不止兩個 這時候就看你使能哪個裝置了 

開復用 + 使能裝置+ 是否重對映 就可以決定這個io口 到底使用哪個功能

STM32串列埠的部分對映與完全對映

以stm32的usart1來舉例 預設使用的是pa9為tx,pa10為rx,當需要開啟復用功能時,需要注意修改以下幾個地方的 1 時鐘的開啟 當使用復用功能後,就需要開啟復用時鐘rcc apb2periph afio 2 初始化引腳的不同,原來的是pa9,pa10,但是現在要初始化pb6,pb7,這...

STM32串列埠的部分對映與完全對映

覺得不錯分享給大家,學習!以stm32的usart1來舉例 預設使用的是pa9為tx,pa10為rx,當需要開啟復用功能時,需要注意修改以下幾個地方的 1 時鐘的開啟 當使用復用功能後,就需要開啟復用時鐘rcc apb2periph afio 2 初始化引腳的不同,原來的是pa9,pa10,但是現在...

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...