串列埠的配置過程
<
一》配置串列埠用到的io口:①rx浮空輸入②tx復用推挽輸出
注意:具體配置如下
用於串列埠通訊
//設定gpioa.9(usart.tx)為復用推挽輸出
gpio_initstructure.gpio_pin=gpio_pin_9;
gpio_initstructure.gpio_speed=gpio_speed_50mhz;
gpio_initstructure.gpio_mode=gpio_mode_af_pp;
gpio_init(gpioa,&gpio_initstructure);
//設定gpioa.10(usart.rx)為浮空輸入
gpio_initstructure.gpio_pin=gpio_pin_10;
gpio_initstructure.gpio_speed=gpio_speed_50mhz;
gpio_initstructure.gpio_mode=gpio_mode_in_floating;
gpio_init(gpioa,&gpio_initstructure);
這裡使用哪個埠的哪二個引腳可以自己選擇!!!
<
二》配置usartx,主要是 usart_inittypedef結構體下的幾個成員包括波特率,位元組長,停止位,校驗位,硬體流,接受傳送等等
注意:具體配置如下
voidusart_configuration(void)
<
三》使能串列埠中需要用到的中斷
這些中斷如下
- usart_it_cts: cts
改變中斷(對於
uart4
和uart5
無法使用
)
*
- usart_it_lbd: lin 間隔偵測中斷
*
- usart_it_txe: 傳送暫存器空中斷
*
- usart_it_tc: 傳送完成中斷
*
- usart_it_rxne: 接收暫存器全滿中斷
*
- usart_it_idle: idle線性中斷
*
- usart_it_pe: 奇偶錯誤中斷
*
- usart_it_err: 錯誤中斷
(楨錯誤
, 雜訊錯誤
, 超速錯誤
注意:具體配置如下 //
開啟接收中斷
usart_itconfig(usart1,usart_it_rxne,enable);
//開啟傳送完中斷
usart_itconfig(usart1,usart_it_tc,enable);
這裡需要用到什麼中斷就呼叫函式開啟哪個
< 四》使能串列埠
注意:具體配置如下 //
使能序列口
usart_cmd(usartx,enable);
<
五》開啟串列埠時鐘(有的工程把所有的需要開啟的時鐘,放在乙個檔案裡開啟,這裡自由選擇,)
注意:具體配置如下
rcc_apb2periphclockcmd(rcc_apb2periph_usart1|rcc_apb2periph_gpioa,enable);
需要什麼時鐘就開啟哪個時鐘, ⑵
還有一種辦法就是用如下程式下面的配置用到哪個時鐘就開啟哪個時鐘:
void rcc_configuration(void)
/*設定系統時鐘(sysclk) */
rcc_sysclkconfig(rcc_sysclksource_pllclk); //rcc_sysclksource_pllclk--
選擇pll作為系統時鐘
/* pll
返回用作系統時鐘的時鐘源*/
while(rcc_getsysclksource() != 0x08) //0x08
:pll作為系統時鐘
}// //設定adc的預分頻器
rcc_adcclkconfig(rcc_pclk2_div4);
//開啟apb2上的gpioa時鐘、gpiob時鐘、gpioc時鐘、gpiod時鐘、gpioe的時鐘
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa|rcc_apb2periph_gpiob|rcc_apb2periph_gpioc,enable);
rcc_apb2periphclockcmd(rcc_apb2periph_gpiod|rcc_apb2periph_gpioe|rcc_apb2periph_gpiof,enable);
//開啟apb2上usart1、adc1、adc2的時鐘
rcc_apb2periphclockcmd(rcc_apb2periph_usart1|rcc_apb2periph_adc1|rcc_apb2periph_adc2|rcc_apb2periph_adc3,enable);
//開啟ahb匯流排上的dma1的時鐘
rcc_ahbperiphclockcmd(rcc_ahbperiph_dma1,enable);
//開啟apb2上的afio功能用於中斷
rcc_apb2periphclockcmd(rcc_apb2periph_afio ,enable);
//開啟apb1匯流排上的tim2的時鐘
rcc_apb1periphclockcmd(rcc_apb1periph_tim2,enable);
//開啟apb1匯流排上的tim3的時鐘
rcc_apb1periphclockcmd(rcc_apb1periph_tim3,enable);
//開啟apb1匯流排上的tim4的時鐘
rcc_apb1periphclockcmd(rcc_apb1periph_tim4,enable);
//設定adc的預分頻,保證adc的時鐘不大於14mhz,負責影響精度;在72mhz的下,採用6分頻。
rcc_adcclkconfig(rcc_pclk2_div6);}
《六》配置nvic:使能串列埠中斷,同時要設定中斷的優先順序
注意:具體配置如下 //
使能usart1中斷,0級先佔優先順序和0級次優先順序
nvic_initstructure.nvic_irqchannel=usart1_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority=0;
nvic_initstructure.nvic_irqchannelsubpriority=1;
nvic_initstructure.nvic_irqchannelcmd=enable;
nvic_init(&nvic_initstructure);
《八》在中斷函式中usartx_irhandler中寫入中斷函式。
stm32串列埠通訊
通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...
STM32串列埠通訊
1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...
STM32串列埠通訊
串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。串列埠的設定一般可以歸結為以下幾個步驟 1 串列埠時鐘使能,gpio時鐘使能。2 設定引腳復用器對映,呼叫gpio pinafconfig函式...