娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月08日(星期日)

2018年06月08日 | STM32空閑中斷+DMA解決接收不定長數據問題

發布者:cloudsousou6 來源: eefocus關鍵字:STM32  空閑中斷  DMA  不定長數據 手機看文章 掃描二維碼
隨時隨地手機看文章

串口的中斷類型:


#define USART_IT_PE                          ((uint16_t)0x0028)  

#define USART_IT_TXE                         ((uint16_t)0x0727)  

#define USART_IT_TC                          ((uint16_t)0x0626)  

#define USART_IT_RXNE                        ((uint16_t)0x0525)  

#define USART_IT_IDLE                        ((uint16_t)0x0424)  

#define USART_IT_LBD                         ((uint16_t)0x0846)  

#define USART_IT_CTS                         ((uint16_t)0x096A)  

#define USART_IT_ERR                         ((uint16_t)0x0060)  

#define USART_IT_ORE                         ((uint16_t)0x0360)  

#define USART_IT_NE                          ((uint16_t)0x0260)  

#define USART_IT_FE                          ((uint16_t)0x0160)  

USART_IT_PE 奇偶錯誤中斷


USART_IT_TXE發送中斷


USART_IT_TC 傳輸完成中斷


USART_IT_RXNE 接收中斷


USART_IT_IDLE 空閑總線中斷


USART_IT_LBD LIN中斷檢測中斷


USART_IT_CTS CTS中斷


USART_IT_ERR 錯誤中斷




程序中用到的就是串口的空閑中斷:當總線是一個字節周期內沒有收到數據時觸發


串口的配置如下:


void uart_init(u32 bound){  

        GPIO_InitTypeDef GPIO_InitStructure;  

    USART_InitTypeDef USART_InitStructure;  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);   

    NVIC_InitTypeDef NVIC_InitStructure;  

     //IO口相關配置  

    USART_DeInit(USART1);    

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速率  

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;   

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  

        GPIO_Init(GPIOA, &GPIO_InitStructure);   

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  

        GPIO_Init(GPIOA, &GPIO_InitStructure);    

        //串口中斷配置  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           

    NVIC_Init(&NVIC_InitStructure);   

    USART_InitStructure.USART_Parity = USART_Parity_No;//沒有奇偶校驗位  

    USART_InitStructure.USART_BaudRate = bound;       //波特率設置  

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位數據位  

    USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位  

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數據流配置  

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//串口收發模式  

        USART_Init(USART1, &USART_InitStructure);   

        USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);  

        USART_Cmd(USART1, ENABLE);    

}    


串口中斷配置:


void USART1_IRQHandler(void)                   

{  

      if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)   

{  

       DMA_Cmd(DMA1_Channel5,DISABLE);  

       recok=1;  

       lenth=USART1->DR;//軟件清空空閑中斷標志位  

       lenth=USART1->SR;  

       lenth=32-DMA_GetCurrDataCounter(DMA1_Channel5);//獲取當前接收的數據量   

       USART_RX_BUF[lenth]=0;//在buff最后加入空字符  

       DMA1_Channel5->CNDTR=32;//重新設置傳輸量為32   

       DMA_Cmd(DMA1_Channel5,ENABLE);  

    }   

}   




DMA配置:


void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)  

{  

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能DMA時鐘  

  

      DMA_DeInit(DMA_CHx);  

      DMA1_MEM_LEN=cndtr;  

      DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;//外設地址  

      DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //內存地址  

      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //傳輸方向外設到內存  

      DMA_InitStructure.DMA_BufferSize = cndtr;  //傳輸量  

      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外設地址不自增    

      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //內存地址自增  

      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;   

      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;   

      DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //普通模式  

      DMA_InitStructure.DMA_Priority = DMA_Priority_High;//高優先級  

      DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  

      DMA_Init(DMA_CHx, &DMA_InitStructure);    

}   




主函數中需要進行的配置:


MYDMA_Config(DMA1_Channel5,(u32)&USART1->DR,(u32)USART_RX_BUF,32);//傳輸方向設置為USART1->DR到USART_RX_BUF 傳輸大小為32字節  

USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);//允許DMA請求  

DMA_Cmd(DMA1_Channel5,ENABLE);  


當標志為recok位1時表示接受完成  在主函數中等待recok位1就可以了


關鍵字:STM32  空閑中斷  DMA  不定長數據 引用地址:STM32空閑中斷+DMA解決接收不定長數據問題

上一篇:STM32 總線空閑 + DMA 方式接收
下一篇:STM32CubeMX:UART(DMA空閑方式)

推薦閱讀

什么樣的車才能叫轎跑?在《電動大咖》看來,性能方面肯定足夠狂野。要扮豬吃老虎?No、No、No,那是20年前的鋼炮,在這個看顏值的時代,沒有時尚的外觀怎么能叫轎跑??這些條件一列出來,可選的車型似乎不多,在新能源車市場更是寥寥無幾,而剛上市不久的名爵6新能源卻給消費者帶來了新的選擇。??拒絕平凡 年輕就要個性說到新能源轎跑,不得不提一直...
當一個孩子跑到馬路上時,人類司機平均需要1.6秒踩下剎車踏板。配備雷達或者激光雷達傳感器和攝像系統的自動駕駛汽車,其反應時間縮短到0.5秒。但是如果汽車以每小時50公里的速度行駛,踩下剎車前汽車將繼續行駛7米。據外媒報道,弗勞恩霍夫可靠性和微集成研究所IZM(Fraunhofer Institute for Reliability and Microintegration IZM)與來汽車行業...
受疫情影響,Uber4月份全球訂單少了八成,接下來業績可能更不樂觀。為應對收入大幅下滑等困難,Uber開始節源開流以渡過難關了?! ?月伊始,Uber一邊開始大幅削減網約車業務,一邊大力扶持業務量上升的外賣業務;同時,又向內部揮舞其裁員的大刀,先后兩次裁員達6700人,尤其是第二次裁員的3000人,Uber要為此支付1億多美金的賠償,可見這波裁員的分量之...
參數表征既需要進行電流-電壓(IV)測試,也需要進行電容-電壓(CV)測試。那么如何 搭建精確的 IV 和 CV 測試測量系統呢?目前開發的制程技術通常 需要通過單通道對晶圓上器件進行精確的 IV 和 CV 測試測量。Keysight B1500A 半導體器件分析儀在單臺主機中使用一個新的單插槽多頻率電容測量單元(MFCMU)和兩個 SMU 單元,能夠支持單通道...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 高淳县| 德化县| 丹东市| 监利县| 武安市| 屏东县| 嫩江县| 邛崃市| 科技| 河津市| 怀宁县| 石狮市| 舞钢市| 武宁县| 蓬溪县| 贵州省| 嘉峪关市| 苍南县| 金乡县| 揭东县| 思南县| 山阳县| 托里县| 甘泉县| 越西县| 汨罗市| 九寨沟县| 平顶山市| 兴文县| 松滋市| 昌邑市| 曲阳县| 久治县| 临武县| 武川县| 天全县| 海门市| 额敏县| 田东县| 阿鲁科尔沁旗| 安龙县|