國(guó)科安芯的AS32系列MCU芯片集成7路USART,能夠靈活地與外部設(shè)備進(jìn)行全雙工數(shù)據(jù)交換,滿足外部設(shè)備對(duì)工業(yè)標(biāo)準(zhǔn) NRZ 異步串行數(shù)據(jù)格式的要求。USART 通過(guò)小數(shù)波特率發(fā)生器實(shí)現(xiàn)了多種波特率。 USART 不僅支持同步單向通信和半雙工單線通信,以及 LIN(局域互連網(wǎng)絡(luò))和調(diào)制解調(diào)器操作 (CTS/RTS) 通過(guò)配置多個(gè)緩沖區(qū)使用 DMA(直接存儲(chǔ)器訪問(wèn))可實(shí)現(xiàn)高速數(shù)據(jù)通信,其通信數(shù)據(jù)格式如下:
硬件設(shè)計(jì)
評(píng)估板板載了一顆CH340 usb轉(zhuǎn)ttl芯片用于串口通訊驗(yàn)證,串口接在MCU串口0,對(duì)外通過(guò)usbmini標(biāo)準(zhǔn)接口與上位機(jī)連接。
軟件設(shè)計(jì)
本小節(jié)實(shí)現(xiàn)上位機(jī)與板卡的雙向數(shù)據(jù)收發(fā),板卡接收上位機(jī)數(shù)據(jù),并原數(shù)據(jù)返回。
初始化流程
? 使能USART以及對(duì)應(yīng)gpio時(shí)鐘
? 配置gpio復(fù)用為usart功能
? 初始化gpio結(jié)構(gòu)體
? 初始化usart結(jié)構(gòu)體
? 調(diào)用庫(kù)函數(shù)實(shí)現(xiàn)收發(fā)
代碼分析
首先進(jìn)行串口初始化,在Bsp文件夾中新建新建print.c和print.h,之后添加到工程目錄下,在log.c中添加初始化代碼:
- void User_Print_Init(uint32_t BaudRate)
- {
- USART_InitTypeDef USART_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIOD_CLK_ENABLE();
- USART0_CLK_ENABLE();
- / Set GPIO multiplex mapping /
- GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART0); / USART0_TX /
- GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART0); / USART0_RX /
- / GPIO Configure /
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_Out_PP;
- GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_4_5mA;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_IType = GPIO_IN_FLOATING;
- GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_4_5mA;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- USART_DeInit(USART0);
- USART_StructInit(&USART_InitStructure);
- / Initializes the USART0 /
- USART_InitStructure.USART_BaudRate = BaudRate;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_InitStructure.USART_OverSampling = USART_OverSampling_16;
- USART_Init(USART0, &USART_InitStructure);
- USART_Cmd(USART0, ENABLE);
- }
首先,我們?cè)O(shè)置了一個(gè)形參用于配置串口通訊波特率,該波特率計(jì)算同樣是通過(guò)系統(tǒng)時(shí)鐘初始化所讀取的總線時(shí)鐘函數(shù)提供計(jì)算基礎(chǔ),因此當(dāng)使用串口時(shí),切勿漏掉該函數(shù),否則需要手動(dòng)輸入時(shí)鐘進(jìn)行計(jì)算。
之后開(kāi)啟GPIOD和USART0的外設(shè)時(shí)鐘,注意,在此之前不要忘了在系統(tǒng)時(shí)鐘初始化中開(kāi)啟兩個(gè)外設(shè)掛載的總線時(shí)鐘。
然后調(diào)用庫(kù)函數(shù)配置兩個(gè)管腳復(fù)用為串口功能,然后初始化TX引腳為推挽輸出,RX管腳為浮空輸入。
最后配置USART0初始化結(jié)構(gòu)體,功能配置為8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn),使能串口。
- while(1)
- {
- if(SET == USART_GetFlagStatus(USART0, USART_FLAG_RXFNE))
- {
- usart_data = USART_ReceiveData(USART0);
- USART_SendData(USART0,usart_data);
- }
- }
在主函數(shù)中,循環(huán)檢測(cè)接收狀態(tài),當(dāng)接收到數(shù)據(jù)時(shí),調(diào)用接收函數(shù)讀取數(shù)據(jù),并通過(guò)串口發(fā)送函數(shù)原路返回。
除此之外,串口可通過(guò)中斷方式和DMA方式進(jìn)行數(shù)據(jù)收發(fā),具體操作在中斷和DMA章節(jié)進(jìn)行具體介紹。
評(píng)估板驗(yàn)證
編譯燒錄代碼,打開(kāi)串口調(diào)試工具并連接串口線,觀察最終效果。
審核編輯 黃宇
-
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1916瀏覽量
86913 -
串口通訊
+關(guān)注
關(guān)注
1文章
265瀏覽量
25543 -
dma
+關(guān)注
關(guān)注
3文章
576瀏覽量
103206 -
USART
+關(guān)注
關(guān)注
1文章
201瀏覽量
31941
發(fā)布評(píng)論請(qǐng)先 登錄
第十四章 USART——串口通訊

EtherCAT主站轉(zhuǎn)Profinet網(wǎng)關(guān)接禾川伺服X4E系列通訊案例

AS32X601驅(qū)動(dòng)系列教程 PLIC_中斷應(yīng)用詳解

AS32X601驅(qū)動(dòng)系列教程 GPIO_按鍵檢測(cè)詳解

AS32X601驅(qū)動(dòng)系列教程 GPIO_點(diǎn)亮LED詳解

AS32X601驅(qū)動(dòng)系列教程 SMU_系統(tǒng)時(shí)鐘詳解

面向工業(yè)與汽車領(lǐng)域的高安全可靠MCU——AS32X601系列芯片解析
AS32X601芯片技術(shù)剖析
AS32X601雙核鎖步MCU技術(shù)優(yōu)勢(shì)分析
串口通訊隔離器的定義與作用
CP210X串口驅(qū)動(dòng)
歐姆龍串口FINS CS_CJ系列協(xié)議全面解析
臺(tái)達(dá)DVP系列串口驅(qū)動(dòng)全面解析

評(píng)論