基本內(nèi)容
使用F4進(jìn)行串口通信需要相關(guān)的配置。由于沒(méi)帶雙頭USB線,我采用串口3搭配CC2541藍(lán)牙&WiFi模塊進(jìn)行透?jìng)鞔陂_(kāi)發(fā)。
根據(jù)資料所示,我需要進(jìn)行下面幾個(gè)步驟:
- 串口時(shí)鐘使能,GPIO時(shí)鐘使能
- 設(shè)置引腳復(fù)用器映射
- GPIO參數(shù)初始化,設(shè)置復(fù)用
- 串口參數(shù)初始化,設(shè)置波特率,字長(zhǎng),奇偶校驗(yàn)等
- 開(kāi)啟中斷,初始化NVIC并使能
- 使能串口
- 編寫(xiě)中斷處理函數(shù)
- 串口發(fā)送AT指令設(shè)置CC2541模塊透?jìng)?/li>
接著才能利用串口透?jìng)鱽?lái)調(diào)試。不過(guò)考慮到函數(shù)復(fù)用和避免日后重復(fù)造輪子的情況發(fā)生,我還是單獨(dú)寫(xiě)成GPIO和串口的配置函數(shù)。因此我的流程如下:
- 初始化GPIO,時(shí)鐘使能,設(shè)置引腳復(fù)用映射,設(shè)置模式等并使能
- 初始化串口,設(shè)置波特率,字長(zhǎng),奇偶校驗(yàn)等并使能串口
- 開(kāi)啟中斷,初始化NVIC。使能中斷
- 編寫(xiě)中斷處理函數(shù)。
初始化GPIO
本次使用的是串口3,涉及的GPIO是PB10和PB11.因此首先要設(shè)置這兩個(gè)GPIO。
使能時(shí)鐘
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
設(shè)置引腳復(fù)用器映射:
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);
分別復(fù)用了B10和B11。
接著初始化。具體代碼在下文查看。
點(diǎn)亮LED(庫(kù)函數(shù)
GPIO_Mode處需要設(shè)置復(fù)用功能GPIO_Mode_AF
,速度50MHZ即可,GPIO_OType設(shè)置推挽復(fù)用以得到更強(qiáng)的輸出能力GPIO_OType_PP
,電平選擇上拉。選擇上拉是因?yàn)楦鶕?jù)串口定義,TX和RX在空閑狀態(tài)保持1。
初始化串口
首先用F4庫(kù)函數(shù)提供的結(jié)構(gòu)體聲明:
USART_InitTypeDef USART_InitStructure;
接著使能時(shí)鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
需要注意的是,根據(jù)芯片手冊(cè),串口1,6是掛在APB2上的,而2,3,4,5都是掛載在APB1上的,因此初始化時(shí)應(yīng)當(dāng)使用RCC_APB1函數(shù)而不是跟之前一樣用APB2。
然后設(shè)置各項(xiàng)相關(guān)參數(shù):
APB和AHB時(shí)鐘總線(未完成
由于只影響到GPIO和串口的初始化,此處不過(guò)多占用篇幅。
這倆是什么玩意?網(wǎng)上查得如下:
AHB(Advanced High-performance Bus), 高速總線,用來(lái)接高速外設(shè)的。APB (Advanced Peripheral Bus) 低速總線,用來(lái)接入低速外設(shè)。
其實(shí)AHB總線非常簡(jiǎn)單。里面一個(gè)仲裁器(Arbiter)用于仲裁多個(gè)主設(shè)備同時(shí)訪問(wèn)總線的情況,三個(gè)多路選擇器,用于選通master與slave之間的data和address。另外ADDR沒(méi)有分讀和寫(xiě)的ADDR,也就是說(shuō)AHB不是全雙工,讀寫(xiě)是不可以同時(shí)進(jìn)行的。所以性能上比AXI一般來(lái)講要弱一些。
對(duì)于APB來(lái)說(shuō),就簡(jiǎn)單多了。主要用來(lái)讀寫(xiě)寄存器。
主要包含
VScode代碼提示也可以看出,APB下掛載了GPIO:
AHB也可以使用:
NVIC初始化
NVIC是什么?
嵌套向量中斷控制器;用于為中斷分組,從而分配搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí);
有什么功能?
先占優(yōu)先級(jí)也就是搶占優(yōu)先級(jí),概念等同于51單片機(jī)中的中斷。假設(shè)有兩中斷先后觸發(fā),已經(jīng)在執(zhí)行的中斷先占優(yōu)先級(jí)如果沒(méi)有后觸發(fā)的中斷 先占優(yōu)先級(jí)更高,就會(huì)先處理先占優(yōu)先級(jí)高的中斷。也就是說(shuō)又有較高的先占優(yōu)先級(jí)的中斷可以打斷先占優(yōu)先級(jí)較低的中斷。這是實(shí)現(xiàn)中斷嵌套的基礎(chǔ)。
次占優(yōu)先級(jí),也就是響應(yīng)優(yōu)先級(jí),只在同一先占優(yōu)先級(jí)的中斷同時(shí)觸發(fā)時(shí)起作用,先占優(yōu)先級(jí)相同,則優(yōu)先執(zhí)行次占優(yōu)先級(jí)較高的中斷。次占優(yōu)先級(jí)不會(huì)造成中斷嵌套。如果中斷的兩個(gè)優(yōu)先級(jí)都一致,則優(yōu)先執(zhí)行位于中斷向量表中位置較高的中斷。
NVIC就是控制上述功能的控制器
評(píng)論
查看更多