國科安芯的AS32系列MCU芯片集成7路USART,能夠靈活地與外部設備進行全雙工數據交換,滿足外部設備對工業標準 NRZ 異步串行數據格式的要求。USART 通過小數波特率發生器實現了多種波特率。 USART 不僅支持同步單向通信和半雙工單線通信,以及 LIN(局域互連網絡)和調制解調器操作 (CTS/RTS) 通過配置多個緩沖區使用 DMA(直接存儲器訪問)可實現高速數據通信,其通信數據格式如下:
硬件設計
評估板板載了一顆CH340 usb轉ttl芯片用于串口通訊驗證,串口接在MCU串口0,對外通過usbmini標準接口與上位機連接。
軟件設計
本小節實現上位機與板卡的雙向數據收發,板卡接收上位機數據,并原數據返回。
初始化流程
? 使能USART以及對應gpio時鐘
? 配置gpio復用為usart功能
? 初始化gpio結構體
? 初始化usart結構體
? 調用庫函數實現收發
代碼分析
首先進行串口初始化,在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);
- }
首先,我們設置了一個形參用于配置串口通訊波特率,該波特率計算同樣是通過系統時鐘初始化所讀取的總線時鐘函數提供計算基礎,因此當使用串口時,切勿漏掉該函數,否則需要手動輸入時鐘進行計算。
之后開啟GPIOD和USART0的外設時鐘,注意,在此之前不要忘了在系統時鐘初始化中開啟兩個外設掛載的總線時鐘。
然后調用庫函數配置兩個管腳復用為串口功能,然后初始化TX引腳為推挽輸出,RX管腳為浮空輸入。
最后配置USART0初始化結構體,功能配置為8位數據位,1位停止位,無校驗,使能串口。
- while(1)
- {
- if(SET == USART_GetFlagStatus(USART0, USART_FLAG_RXFNE))
- {
- usart_data = USART_ReceiveData(USART0);
- USART_SendData(USART0,usart_data);
- }
- }
在主函數中,循環檢測接收狀態,當接收到數據時,調用接收函數讀取數據,并通過串口發送函數原路返回。
除此之外,串口可通過中斷方式和DMA方式進行數據收發,具體操作在中斷和DMA章節進行具體介紹。
評估板驗證
編譯燒錄代碼,打開串口調試工具并連接串口線,觀察最終效果。
審核編輯 黃宇
-
驅動
+關注
關注
12文章
1890瀏覽量
86473 -
串口通訊
+關注
關注
1文章
264瀏覽量
25367 -
dma
+關注
關注
3文章
571瀏覽量
102233 -
USART
+關注
關注
1文章
199瀏覽量
31580
發布評論請先 登錄
AS32X601驅動系列教程 PLIC_中斷應用詳解

AS32X601驅動系列教程 GPIO_按鍵檢測詳解

AS32X601驅動系列教程 GPIO_點亮LED詳解

AS32X601驅動系列教程 SMU_系統時鐘詳解

評論