久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2658|回復: 3
打印 上一主題 下一主題
收起左側

STM32串口學習_02 -CPU小白

[復制鏈接]
跳轉到指定樓層
樓主
ID:689247 發表于 2021-8-12 14:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 cpu小白白 于 2021-8-12 14:33 編輯

一.串口結構體    a.使能串口中斷后,串口在接收到數據后會進入中斷函數,中斷函數就是我們要對數據進行整理的地方。(中斷函數中不能寫大量代碼,有可能導致,下次中斷來之前,數據還未處理完成,所以數據分析在后文)。
    b.stm32的串口數量很多,因此將每個串口在運行中所需要的變量整合寫進一個結構體中,相對更加方面快捷。按照本人經常使用的數據,寫出的結構體如下:

#define SBUF_SIZE 255                 //數據緩沖區大小
#define RBUF_SIZE 255

typedef struct
{
    u8 sbuf[SBUF_SIZE];                   //發送數組
    u8 rbuf[RBUF_SIZE];                   //接收數組
    u8 temporary_buf[RBUF_SIZE];  //接收臨時存儲buf
    u16 sbuf_head;                            //需要發送數據的位置
    u16 sbuf_tail;                            //需要發送數據的結束位置
    u16 rbuf_head;                            //需要發送數據的位置
    u16 rbuf_tail;                            //需要發送數據的結束位置
    u8 com_already;                           //接收到數據
    u32 com_timeout;                          //接收到數據到處理數據間延時
    uint32_t rc;                              //計數
}UART_InformationType;

extern UART_InformationType  UART1_Information;  //創建串口1的結構體
extern UART_InformationType  UART2_Information;
extern UART_InformationType  UART3_Information;



二.串口中斷
    a.串口中斷來對接受的數據進行整理,如果串口處理數據的方法相差不是太大,都可以使用此中斷函數來整理接收的數據。
    b.串口數據整理的思想,以數據接受為例:
        1.開辟兩個256字節的數組,用來存放接受或者發送的數據。
        2.給256個字節設數據頭尾,每當進入一次中斷,有一個數據傳入就把數據寫到結構體中,同把數據頭+1,當數據頭超過數據緩沖區大小時清零。
        3.有數據傳入就把標志位 com_already 置1,處理完數據后清0。
        4.數據頭尾的作用:剛上電時都為0,傳入8個字節正確的數據,先將8個字節的數據保存在結構體中,同時每傳入一個字節數據頭加1。置1標志位等待數據處理函數。 數據處理函數處理完成數據后將數據尾加8等于數據頭。(此時假設數據都是正確的情況)
    c.中斷函數中只寫了數據的接受,對于stm32來說,數據發送直接封裝為函數更加簡單方便。
/********************************************************************
*函數描述:usart1中斷
*入口說明:無
*返回說明:無
**********************************************************************/
void USART1_IRQHandler(void)
{
    Dispose_USART_IRQHandler(USART1,&UART1_Information);
}

/*********************************************************************
*函數描述:usart1中斷
*入口說明:無
*返回說明:無
**********************************************************************/
void USART2_IRQHandler(void)
{
    Dispose_USART_IRQHandler(USART2,&UART2_Information);
}

/*********************************************************************
*函數描述:usart1中斷
*入口說明:無
*返回說明:無
**********************************************************************/
void USART3_IRQHandler(void)
{
    Dispose_USART_IRQHandler(USART3,&UART3_Information);
}

/*********************************************************************
*函數描述:usart中斷,處理接受的數據
*入口說明:USART_TypeDef* USARTx   UART_InformationType* USARTx_Information
                        中斷的串口                         對應串口的結構體
*返回說明:無
**********************************************************************/
void Dispose_USART_IRQHandler(USART_TypeDef* USARTx,UART_InformationType* USARTx_Information)
{
    if(USART_GetITStatus(USARTx, USART_IT_RXNE) != RESET)   //接收數據
    {
        USARTx_Information->rbuf[USARTx_Information->rbuf_head++] = (u8)USARTx->DR;
        if(USARTx_Information->rbuf_head == SBUF_SIZE)
        {
            USARTx_Information->rbuf_head = 0;
        }
        USARTx_Information->com_already = USART_SBUF_NO_EMPTY;
       // USARTx_Information->com_timeout = Timer_1ms;          //更新空閑計時
    }
}

/*********************************************************************
*函數描述:usart發送數據
*入口說明:USARTx:選擇USART通道      
                data:發送的數據
                data_long:數據長度
*返回說明:無
**********************************************************************/
void Send_Usart_data(USART_TypeDef* USARTx,u8* data,u16 data_long)
{
    u16 a;
    for(a = 0;a < data_long;a++)
    {
           USART_SendData(USARTx,*data);                      //發送一位數據
           data++;                                                         //指向下一個發送的數據
           USART_ITConfig(USARTx, USART_IT_TC, ENABLE);
    }

}


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584195 發表于 2021-8-14 09:21 | 只看該作者
寫得非常好,樓主歷害呀!
回復

使用道具 舉報

板凳
ID:689247 發表于 2021-8-17 08:33 | 只看該作者
還有最后一個章節,這幾天有空總結完會把所有代碼整合到一起。
回復

使用道具 舉報

地板
ID:584195 發表于 2021-8-19 15:57 | 只看該作者
能不能把DMA也寫得通俗易懂一些的文章!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费黄色a视频 | 亚洲精久久 | av影音| 亚洲一二三在线 | 国产精品18久久久久久久 | 欧美日韩亚洲国产 | 国产精品自产拍在线观看蜜 | 操操网站| 一区二区三区视频在线观看 | 久久久久免费精品国产 | 欧美日韩91 | 一级黄在线观看 | 久久综合成人精品亚洲另类欧美 | av在线视 | 亚洲久久 | 日韩高清一区 | 伊人成人免费视频 | 国产综合久久 | 午夜精品一区二区三区在线 | 亚洲国产一区二区三区 | 日韩在线免费播放 | 国产最新视频在线 | 亚洲欧洲在线视频 | 中文字幕一区在线观看视频 | 成人三级av | 成人精品一区二区三区中文字幕 | 亚洲精品91 | 日韩免费一区 | 欧美寡妇偷汉性猛交 | 日韩欧美手机在线 | 一区二区三区四区不卡视频 | 日韩成人在线免费视频 | 国产亚洲一区二区在线观看 | 最近免费日本视频在线 | 看羞羞视频免费 | 黄色国产 | 久久免费精品 | 色综合99 | 成人亚洲片 | 99精品视频免费观看 | 国产精品99久久久久久久久久久久 |