久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32串口學習_02 -CPU小白
[打印本頁]
作者:
cpu小白白
時間:
2021-8-12 14:15
標題:
STM32串口學習_02 -CPU小白
本帖最后由 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);
}
}
作者:
zyluglugl
時間:
2021-8-14 09:21
寫得非常好,樓主歷害呀!
作者:
cpu小白白
時間:
2021-8-17 08:33
還有最后一個章節,這幾天有空總結完會把所有代碼整合到一起。
作者:
zyluglugl
時間:
2021-8-19 15:57
能不能把DMA也寫得通俗易懂一些的文章!
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产午夜精品一区二区三区视频
|
91视频精品
|
www.一区
|
日本不卡二区
|
日韩欧美精品
|
日韩国产在线
|
视频爱爱免费视频爱爱太爽
|
欧美三级三级三级爽爽爽
|
国产小视频网站
|
五月天激情国产综合婷婷婷
|
亚洲第一天堂网
|
三上悠亚久久
|
日韩成人在线观看视频
|
久久亚洲国产
|
亚洲精品1
|
www.av在线播放
|
亚洲欧美日韩在线
|
国产精品成人一区二区
|
欧美人与性动交α欧美精品
|
伊人精品在线
|
日韩精品视频在线免费观看
|
中文字幕av片
|
国产1级片
|
久久国产一区二区三区
|
激情综合网站
|
午夜免费时刻
|
国产精品久久久999 成人在线国产
|
美女黄色大片
|
污视频网站在线观看
|
国产精品毛片一区视频播
|
激情综合五月天
|
国产一级在线视频
|
深夜福利视频在线观看
|
国产福利小视频
|
成人欧美日韩
|
人人爽人人澡
|
欧美一级片在线观看
|
成人动态视频
|
av黄色在线观看
|
亚洲精品www久久久久久广东
|
成人网页
|