硬體平台:stm32f10x usart模組 + jlink+usb轉ttl小板
軟體平台:keil 4
一、基礎知識
串列埠:通用同步非同步收發器(usart),支援同步單向與半雙工單線,允許多處理器通訊,可用dma。
任何usart雙向通訊至少要3個引腳:rx tx gnd
rx:序列輸入,通過取樣技術區別資料與雜訊
tx:當傳送器被禁止時,輸出引腳恢復到i/o埠配置
當傳送器被啟用時,不發資料時,tx引腳處於高電平
二、傳送程式例程
程式涉及的模組有:
rcc:復位及時鐘控制模組,用於初始化stm32 usart外設時鐘及io口復用時鐘;
usart:通用同步非同步收發器,即串列埠,用於傳送資料至上位機顯示已傳送的資料;
gpio:通用輸入輸出口復用配置模組。
1、rcc(復位和時鐘控制 reset clock controller)配置:常規時鐘配置+usart相對應的io口時鐘+usart時鐘 + 管腳功能復用時鐘
2、gpio(通用輸出輸入口)配置 afio 復用...:傳送端推挽輸出,接收端浮空輸入
3、usart配置:通用同步非同步收發器:8bits一幀,通過快取區交換
4、nvic配置(nest vector interrupt controller):嵌入中斷向量控制器
中斷響應
中斷優先順序:優先順序編號小者優先順序高
查詢優先順序+執行優先順序
多個中斷掛起時,執行優先順序高者先執行
若執行優先順序同,先執行查詢優先順序高的,在中斷向量表的位置決定
中斷巢狀:優先順序低著被打斷,cpu先執行優先順序高者
中斷掛起:執行高的時候,低者來了,低者被掛起,等待執行
nvic 管理中斷優先順序,256個中斷分配優先順序,次佔優先順序不會造成中斷巢狀
5、傳送接收資料
rcc
//rcc時鐘配置
void rcc_cfg(void)
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa | rcc_apb2periph_gpiob | rcc_apb2periph_afio , enable);
rcc_apb1periphclockcmd(rcc_apb1periph_usart3,enable);
//開啟gpio時鐘,復用功能,串列埠1的時鐘
/*void rcc_apb2periphclockcmd(u32 rcc_apb2periph, functionalstate newstate)
enable 或 disable apb2 外設時鐘
rcc_apb2periph_afio 功能復用io 時鐘
rcc_apb2periph_gpioa/b/c/d/e gpioa/b/c/d/e 時鐘
rcc_apb2periph_adc1/adc2 adc1/2 時鐘
rcc_apb2periph_tim1
rcc_apb2periph_spi1
rcc_apb2periph_usart1
rcc_apb2periph_all 全部apb2外設時鐘*/
}
gpio
usart//io口配置
void gpio_cfg(void)
gpio_inittypedef;*/
//函式:指向結構gpio_inittypedef的指標,待初始化
//gpio_structinit中的成員:gpio_pin/speed/mode
gpio_initstructure.gpio_pin = gpio_pin_10;
//1、選中引腳gpio_pin_0--15 or gpio_pin_all 選中全部管腳
//2、gpio_speed:gpio_speed_10mhz/_2mhz/_50mhz 最高輸出速率
gpio_initstructure.gpio_mode = gpio_mode_af_pp;
/*mode,工作狀態:gpio_mode_ain ----- 模擬輸入
_in_floating ----- 浮空輸入
_ipd ----- 上拉輸出
_ipu ----- 上拉輸入
_out_od ----- 開漏輸出
_out_pp ----- 推挽輸出
_af_od ----- 復用開漏輸出
_af_pp ----- 復用推挽輸出*/
gpio_init(gpiob , &gpio_initstructure);
//選擇a,初始化
//pa10作為us1的rx端,負責接收資料
gpio_initstructure.gpio_pin = gpio_pin_11;
//選擇10腳
gpio_initstructure.gpio_mode = gpio_mode_in_floating;
//io浮空輸入
gpio_init(gpiob, &gpio_initstructure);
//初始化
//提示標示:led顯示串列埠正在傳送資料/接收資料
gpio_initstructure.gpio_pin = gpio_pin_4;
gpio_initstructure.gpio_mode = gpio_mode_out_pp;
//推挽輸出
gpio_init(gpioa, &gpio_initstructure);
}
//串列埠初始化
void usart_cfg(void)
nvic
//配置中斷
void nvic_cfg(void)
nvic_inittypedef;*/
//選擇串列埠1中斷
nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;
//搶占式,先佔 中斷優先順序設定為0
nvic_initstructure.nvic_irqchannelsubpriority = 0;
//響應式,從 中斷優先順序設定為0
nvic_initstructure.nvic_irqchannelcmd = enable;
//使能中斷
nvic_init(&nvic_initstructure);
} extern flagstatus rx_status;
void usart1_irqhandler(void)
}
歡迎討論,共同學習
STM32F30X USART串列埠初始化順序
void inituart void 在做串列埠初始化時候,務必先將串列埠的rcc時鐘開啟,後進行相對於的gpio與usart配置,否則串列埠會無法工作.rcc ahbperiphclockcmd rcc ahbperiph gpioa enable rcc apb2periphclockcmd r...
STM32F10x系列 中斷
概念問題 中斷與事件有什麼聯絡與區別?stm32之中斷與事件 中斷與事件的區別 簡單概括下。中斷 cpu單執行緒情況下只能處理單一任務,在有零時任務需要處理時,可以暫時放下當前任務,優先處理零時任務,再回過來處理之前的任務。多個中斷可以進行巢狀,比如產生了多個零時任務,那麼就可以按照優先順序處理這多...
基於stm32f407建立stm32F427工程
分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...