常用的6個函式,結構體:
usart 初始化結構體(usart_inittypedef)
usart 時鐘初始化結構體(usart_clockinittypedef)
串列埠使能函式void usart_cmd(usart_typedef* usartx, functionalstate newstate)
資料傳送函式void usart_senddata(usart_typedef* usartx, uint16_t data)
資料接收函式uint16_t usart_receivedata(usart_typedef* usartx)
中斷狀態位獲取函式itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it)
usart 初始化結構體(usart_inittypedef)
初始化結構體定義在 stm32f10x_usart.h 檔案中,初始化庫函式定義在 stm32f10x_usart.c 檔案中,程式設計時我們可以結合這兩個檔案內注釋使用。
typedef結構體成員:1) usart_baudrate:波特率設定。一般設定為 2400、9600、19200、115200。標準庫函式會根據設定值計算得到 usartdiv 值,從而設定 usart_brr 暫存器值。struct usart_inittypedef;
2) usart_wordlength:資料幀字長,可選 8 位或 9 位。它設定 usart_cr1 暫存器的 m 位的值。如果沒有使能奇偶校驗控制,一般使用 8 資料位;如果使能了奇偶校驗則一般設定為 9 資料位。
3) usart_stopbits:停止位設定,可選 0.5 個、1 個、1.5 個和 2 個停止位,它設定 usart_cr2 暫存器的 stop[1:0]位的值,一般我們選擇 1 個停止位。
4) usart_parity : 奇 偶 校 驗 控 制 選 擇 , 可 選 usart_parity_no( 無校驗 ) 、 usart_parity_even( 偶校驗 ) 以 及 usart_parity_odd( 奇 校 驗 ) , 它 設 定 usart_cr1 暫存器的 pce 位和 ps 位的值。
5) usart_mode:usart 模式選擇,有 usart_mode_rx 和 usart_mode_tx,允許使用邏輯或運算選擇兩個,它設定 usart_cr1 暫存器的 re 位和 te 位。
6) usart_hardwareflowcontrol:硬體流控制選擇,只有在硬體流控制模式才有效,可選有⑴使能 rts、⑵使能 cts、⑶同時使能 rts 和 cts、⑷不使能硬體流。
usart 時鐘初始化結構體(usart_clockinittypedef)
使用同步模式時需要配置 sclk 引腳輸出脈衝的屬性,標準庫使用乙個時鐘初始化結構體 usart_clockinittypedef 來設定,該結構體內容也只有在同步模式才需要設定。
typedef極性和相位是配合這使用:極性表示串列埠空閒時候是高電平還是低電平,相位指的是第乙個邊緣採集資料還是第二個邊緣採集資料.struct usart_clockinittypedef;
結構體成員:
1) usart_clock:同步模式下 sclk 引腳上時鐘輸出使能控制,可選禁止時鐘輸出 (usart_clock_disable)或開啟時鐘輸出(usart_clock_enable);如果使用同步模式傳送,一般都需要開啟時鐘。它設定 usart_cr2 暫存器的 clken 位的值。
2) usart_cpol:同步模式下 sclk 引腳上輸出時鐘極性設定,可設定在空閒時 sclk 引腳為低電平(usart_cpol_low)或高電平(usart_cpol_high)。它設定 usart_cr2 暫存器的 cpol 位的值。
3) usart_cpha:同步模式下 sclk 引腳上輸出時鐘相位設定,可設定在時鐘第乙個變化沿捕獲資料(usart_cpha_1edge)或在時鐘第二個變化沿捕獲資料。它設定 usart_cr2 暫存器的 cpha 位的值。usart_cpha 與 usart_cpol 配合使用可以獲得多種模式時鐘關係。
4) usart_lastbit:選擇在傳送最後乙個資料位的時候時鐘脈衝是否在 sclk 引腳輸 出 , 可 以 是 不 輸 出 脈 衝 (usart_lastbit_disable) 、 輸 出 脈 衝 (usart_lastbit_enable)。它設定 usart_cr2 暫存器的 lbcl 位的值。
串列埠使能函式
void usart_cmd(usart_typedef* usartx, functionalstate newstate)
usart_cmd函式的功能是使能或失能usart串列埠外設。
例:使能usart1 usart_cmd(usart1,enable);
資料傳送函式
void usart_senddata(usart_typedef* usartx, uint16_t data)
usart_senddata函式的功能是通過外設usartx傳送單個資料。
例:從usart3傳送乙個字元0x26
usart_senddata(usart3,0x26);
資料接收函式
uint16_t usart_receivedata(usart_typedef* usartx)
usart_receivedata函式的功能是返回usartx最近接收到的資料。
例:從usart2讀取接收到的資料
u8 rxdata;
rxdata = usart_receivedata(usart2);
中斷狀態位獲取函式
itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it)
函式的功能是檢查指定的usart標誌位設定與否
usart_flag_cts cts標誌位
usart_flag_lbd lin中斷檢測標誌位
usart_flag_txe 傳送資料暫存器空標誌位
usart_flag_tc 傳送完成標誌位
usart_flag_rxne 接收資料暫存器非空標誌位
usart_flag_idle 空閒匯流排標誌位
usart_flag_ore 溢位錯誤標誌位
usart_flag_ne 雜訊錯誤標誌位
usart_flag_fe 幀錯誤標誌位
usart_flag_pe 奇偶錯誤標誌位
例:檢查usart1傳送標誌位的值
flagstatus status;
status = usart_getflagstatus(usart1,usart_flag_txe);
usart_clearflag函式的功能是清除usartx的待處理標誌位。
例:清除usart1的溢位錯誤標誌位
usart_clearflag(usart1,usart_flag_ore);
usart_getitstatus函式的功能是檢查指定的usart中斷發生與否。
usart_it_pe 奇偶錯誤中斷
usart_it_txe 傳送中斷
usart_it_tc 傳送完成中斷
usart_it_rxne 接收中斷
usart_it_idle 空閒匯流排中斷
usart_it_lbd lin中斷探測中斷
usart_it_cts cts中斷
usart_it_ore 溢位錯誤中斷
usart_it_ne 噪音錯誤中斷
usart_it_fe 幀錯誤中斷
例:檢查usart1的中斷型別
itstatus erroritstatus;
erroritstatus = usart_getitstatus(usart1,usart_it_overrunerror);
使能或者失能指定的usart串列埠中斷
void usart_itconfig(usart_typedef* usartx, uint16_t usart_it, functionalstate newstate)
usart_it_pe 奇偶錯誤中斷
usart_it_txe 傳送中斷
usart_it_tc 傳輸完成中斷
usart_it_rxne 接收中斷
usart_it_idle 空閒匯流排中斷
usart_it_lbd lin中斷檢測中斷
usart_it_cts cts中斷
usart_it_err 錯誤中斷
例:使能usart1接收中斷
usart_cmd(usart1,usart_it_rxne,enable);
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...
結構體初始化
結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...
C 結構體初始化
今天在看mfc結構時,順便看了看 深入淺出mfc 發現有這麼一行 m pmainwnd new cmyframewnd 乍一看,很正常啊,再仔細一看,貌似 new cmyframewnd 的時候少了一對括號。奇怪!之後又翻了翻書,發現好多處都是這樣的。難道我弄錯了,不可能啊,一般情況下在new乙個新...