91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何解決PWM使用的DMA通道與串口接收的DMA通道撞車問(wèn)題

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-16 11:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

項(xiàng)目做到一半,碰到個(gè)尷尬問(wèn)題:PWM使用的DMA通道與串口接收的DMA通道撞車了,咋辦?

考慮一下,決定放棄idle中斷+dma的串口不定長(zhǎng)數(shù)據(jù)接收方案,回到中斷接收去。

中斷接收函數(shù)HAL_UART_RECEIVE_IT函數(shù)是個(gè)定長(zhǎng)接收函數(shù),除非把接收長(zhǎng)度設(shè)為1。由于我使用freertos系統(tǒng),打斷系統(tǒng)的時(shí)間應(yīng)盡可能少,頻率盡可能低。每個(gè)字節(jié)都進(jìn)一次hal庫(kù)的接收處理函數(shù),進(jìn)行各種判斷實(shí)在是不友好,因此考慮跳過(guò)hal的串口處理部分,直接判斷uart_flag_rxne標(biāo)志位與uart_flag_idle標(biāo)志位,存入接收緩沖。觸發(fā)idle中斷后認(rèn)為不定長(zhǎng)數(shù)據(jù)接收完畢,進(jìn)行處理。

代碼:

中斷使能與初始化,不啟用hal_uart_receive_it。

100059078-113575-x1.png

中斷處理部分,跳過(guò)hal中斷處理函數(shù)

100059078-113576-x2.png

注意:__hal_uart_clear_flag函數(shù)不能清除idle標(biāo)志位,需要用古老的讀取方法清空。否則會(huì)卡死在中斷處理結(jié)束之后。

優(yōu)點(diǎn):中斷處理內(nèi)容盡可能簡(jiǎn)化,降低對(duì)系統(tǒng)內(nèi)核的打斷;

缺點(diǎn):只適用于8位數(shù)據(jù)位,無(wú)校驗(yàn)位等最常規(guī)通信方式,對(duì)于更復(fù)雜參數(shù)的串口通信有待測(cè)試,省掉的hal庫(kù)會(huì)不會(huì)造成運(yùn)行不穩(wěn)定有待于繼續(xù)測(cè)試。

版權(quán)聲明:本文轉(zhuǎn)自CSDN,博主fox0815
遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
原文鏈接:https://blog.csdn.net/fox0815/article/details/106461788
審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5867

    瀏覽量

    225564
  • 串口
    +關(guān)注

    關(guān)注

    15

    文章

    1618

    瀏覽量

    82791
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    581

    瀏覽量

    105913
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    DMA彈性映射功能

    映射模式下,TMR2的overflow事件產(chǎn)生DMA請(qǐng)求只在某固定通道下,通過(guò)彈性映射功能,可以將其定義到DMA的任意通道。 6) 下載程序,通過(guò)抓取PC口的波形觀察結(jié)果。
    發(fā)表于 12-12 16:04

    CW32L052 DMA直接內(nèi)存訪問(wèn)介紹

    傳輸,如FLASH存儲(chǔ)器、UART串口、TIM定時(shí)器、ADC數(shù)模轉(zhuǎn)換器等被配置為DMA通道的觸發(fā)源時(shí), 可以產(chǎn)生DMA請(qǐng)求(DMA req
    發(fā)表于 12-12 07:21

    哪些場(chǎng)景適合使用DMA?

    。 串行通信(UART,SPI,I2C等): UART:在大量數(shù)據(jù)收發(fā)時(shí),例如通過(guò)串口接收一幀數(shù)據(jù)或發(fā)送一幀數(shù)據(jù),可以使用DMA來(lái)搬運(yùn)數(shù)據(jù)。比如,使用DMA
    發(fā)表于 11-12 07:13

    RVMCU課堂「18」: 手把手教你玩轉(zhuǎn)RVSTAR—DMA數(shù)據(jù)傳輸篇

    發(fā)送功能,讓數(shù)據(jù)不經(jīng)CPU直接從內(nèi)存(txbuffer)傳輸?shù)?b class='flag-5'>串口的發(fā)送端,然后使用串口DMA接收功能接收10個(gè)字節(jié)的數(shù)據(jù),保存到rxbu
    發(fā)表于 10-30 08:29

    rt-thread 在使用串口DMA模式的時(shí)候,接收數(shù)據(jù)接收不到00,為什么?

    硬件為STM32F103ZET6: 在使用串口通訊時(shí),在DMA接收模式下,收不到00數(shù)據(jù),遇到00數(shù)據(jù),好像DMA模式就認(rèn)為是數(shù)據(jù)已經(jīng)結(jié)束了一樣。 代碼調(diào)試部分 換成非0數(shù)據(jù)就能收
    發(fā)表于 10-14 06:20

    串口DMA接收方式打開(kāi),為什么在開(kāi)啟IDLE中斷的情況下還需要開(kāi)啟DMA中斷呢?

    如圖,在以 RT_DEVICE_FLAG_DMA_RX 方式打開(kāi)串口時(shí),底層會(huì)配置串口IDLE中斷,同時(shí)也會(huì)打開(kāi)DMA中斷,DMA中斷在
    發(fā)表于 09-29 08:30

    串口DMA接收數(shù)據(jù)包丟失怎么解決?

    RTT串口DMA接收數(shù)據(jù),超過(guò)緩沖區(qū)后為什么會(huì)吞掉一個(gè)數(shù)據(jù)包呢,不能每次處理完后清除緩沖區(qū)數(shù)據(jù)嗎,感覺(jué)接收的數(shù)據(jù)是累計(jì)的,累計(jì)滿之后會(huì)重新覆蓋,在最后一個(gè)包
    發(fā)表于 09-29 07:50

    配置了串口DMA,現(xiàn)在是接收可以,發(fā)送不行,是什么地方?jīng)]有設(shè)置對(duì)嗎?

    配置了串口DMA,現(xiàn)在是接收可以,發(fā)送不行,是什么地方?jīng)]有設(shè)置對(duì)嗎?當(dāng)配置DMA_TX 不能發(fā)送數(shù)據(jù),默認(rèn)輪詢發(fā)送就可以。配置如下圖:
    發(fā)表于 09-28 07:41

    完全按照rt-thread 里的串口DMA接收寫的,接收內(nèi)存無(wú)論怎么擴(kuò)大還是報(bào)錯(cuò),為什么?

    完全按照rt-thread 里的串口DMA接收寫的,還是接收內(nèi)存無(wú)論怎么擴(kuò)大還是報(bào)錯(cuò). Warning: There is no enough buffer for saving d
    發(fā)表于 09-25 07:16

    STM32F405RGT6 ADC2+TIM4觸發(fā)+DMA(DMA2_Stream2_CH1)+DMA中斷會(huì)死機(jī),怎么解決?

    NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream2_IRQn;//DMA2_Stream2中斷占用通道
    發(fā)表于 08-04 07:16

    求助,關(guān)于stm32H7多DMA數(shù)據(jù)流問(wèn)題求解

    情況如下:stm32H7配置了一個(gè)adc進(jìn)行采樣,通過(guò)dma進(jìn)行數(shù)據(jù)傳輸,串口接收和發(fā)送命令,用兩個(gè)dma數(shù)據(jù)流通道,采用的空閑中斷。 問(wèn)題
    發(fā)表于 07-29 15:02

    STM32407使用串口閑時(shí)中斷+DMA方式接收最大接收字節(jié)是多少?

    使用串口閑時(shí)中斷+DMA方式接收數(shù)據(jù),波特率為460800,DMA接收長(zhǎng)度為1024個(gè)字節(jié),并開(kāi)啟串口
    發(fā)表于 07-22 08:16

    第十五章 DMA

    本章介紹DMA(直接存儲(chǔ)器存?。?,其可在不占用CPU的情況下搬數(shù)據(jù),支持多種傳輸方向,含控制器、通道等配置及相關(guān)實(shí)驗(yàn)代碼。
    的頭像 發(fā)表于 06-14 16:32 ?1424次閱讀
    第十五章 <b class='flag-5'>DMA</b>

    為什么在“PWM Adc Dma 344 S32CT”示例中使用ISR塊來(lái)讀取dma adc通道?

    我正在 MBDT 中使用 S32K358 進(jìn)行一個(gè)項(xiàng)目,我正在尋找啟用 DMA 傳輸類型的 ADC 模塊。 在 ADC 示例“PWM Adc Dma 344 S32CT”中,我發(fā)現(xiàn)要讀取配置為
    發(fā)表于 04-08 06:39

    STM32G030F6 ADC+DMA通道非連續(xù)采樣無(wú)法正常工作怎么解決?

    配置:使用STM32G030F6 ADC外設(shè)時(shí),ADC使用兩個(gè)通道。DMA配置為循環(huán)模式,ADC掃描模式+非連續(xù)采樣。 問(wèn)題:初始化階段能進(jìn)一次DMA傳輸完成中斷,在main函數(shù)中再次開(kāi)啟ADC轉(zhuǎn)化
    發(fā)表于 03-12 07:10