Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DMA
串口
HC32F4
HC32F460 串口DMA接收问题
发布于 2022-11-15 17:23:08 浏览:676
订阅该版
以前用STM32F1的时候串口DMA接收方式解决断帧的问题需要修改一个地方 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20221115/8754558218d8a818426131ed1e10eb69.png) 但是用HC32F460没有这两个函数不知道怎么弄了 问题解决了,改了3个地方 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20221115/f3ab166c220df6b751fec597f9b411dc.png)
查看更多
1
个回答
默认排序
按发布时间排序
YoHo.
2022-11-15
这家伙很懒,什么也没写!
用DMA链表 头尾相接 2个buffer进行乒乓 ```c stc_dma_llp_descriptor_t AudioDmaLLP[2] = { { .SARx = (uint32_t)(&Sin1K32767[0]), .DARx = (uint32_t)(&I2S_CH->TXBUF), .DTCTLx_f.CNT = 960, .DTCTLx_f.BLKSIZE = 1, .LLPx = (uint32_t)(&AudioDmaLLP[1]), .CHxCTL_f.SINC = AddressIncrease, .CHxCTL_f.DINC = AddressFix, .CHxCTL_f.HSIZE = Dma16Bit, .CHxCTL_f.LLPEN = Enable, .CHxCTL_f.LLPRUN = LlpWaitNextReq, .CHxCTL_f.IE = Enable, }, { .SARx = (uint32_t)(&Sin1K32767[0]), .DARx = (uint32_t)(&I2S_CH->TXBUF), .DTCTLx_f.CNT = 960, .DTCTLx_f.BLKSIZE = 1, .LLPx = (uint32_t)(&AudioDmaLLP[0]), .CHxCTL_f.SINC = AddressIncrease, .CHxCTL_f.DINC = AddressFix, .CHxCTL_f.HSIZE = Dma16Bit, .CHxCTL_f.LLPEN = Enable, .CHxCTL_f.LLPRUN = LlpWaitNextReq, .CHxCTL_f.IE = Enable, }}; static void I2S2_DMATxCplt(void) { rt_interrupt_enter(); /* enter interrupt */ DMA_ClearIrqFlag(DMA_UNIT, DMA_CH, TrnCpltIrq); if (BufferEndCallBack && BufferEndParam) { uint32_t index; if (DMA_UNIT->LLP2 == (uint32_t)&AudioDmaLLP[0]) { index = 1; } else { index = 0; } BufferEndCallBack(BufferEndParam, index); } rt_interrupt_leave(); /* leave interrupt */ } static void FirstDMAConfig(stc_dma_llp_descriptor_t *first) { stc_dma_config_t stcDmaCfg; MEM_ZERO_STRUCT(stcDmaCfg); /* Disable DMA1. */ // DMA_Cmd(DMA_UNIT, Disable); DMA_ClearIrqFlag(DMA_UNIT, DMA_CH, BlkTrnCpltIrq); DMA_ClearIrqFlag(DMA_UNIT, DMA_CH, TrnCpltIrq); stcDmaCfg.u16BlockSize = 1u; // uint16 stcDmaCfg.u16TransferCnt = first->DTCTLx_f.CNT; stcDmaCfg.u32SrcAddr = first->SARx; stcDmaCfg.u32DesAddr = (uint32_t)(&I2S_CH->TXBUF); stcDmaCfg.stcDmaChCfg.enLlpEn = Enable; stcDmaCfg.stcDmaChCfg.enLlpMd = LlpWaitNextReq; stcDmaCfg.u32DmaLlp = first->LLPx; stcDmaCfg.stcDmaChCfg.enSrcRptEn = Disable; stcDmaCfg.stcDmaChCfg.enDesRptEn = Disable; stcDmaCfg.stcDmaChCfg.enSrcInc = AddressIncrease; stcDmaCfg.stcDmaChCfg.enDesInc = AddressFix; stcDmaCfg.stcDmaChCfg.enIntEn = Enable; stcDmaCfg.stcDmaChCfg.enTrnWidth = Dma16Bit; PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_DMA1, Enable); DMA_Cmd(DMA_UNIT, Enable); DMA_InitChannel(DMA_UNIT, DMA_CH, &stcDmaCfg); DMA_ChannelCmd(DMA_UNIT, DMA_CH, Enable); PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_AOS, Enable); DMA_SetTriggerSrc(DMA_UNIT, DMA_CH, EVT_I2S2_TXIRQOUT); stc_irq_regi_conf_t stcIrqRegiCfg; MEM_ZERO_STRUCT(stcIrqRegiCfg); stcIrqRegiCfg.enIRQn = I2S2_DMA_TXC_INT_IRQn; stcIrqRegiCfg.pfnCallback = I2S2_DMATxCplt; stcIrqRegiCfg.enIntSrc = I2S2_DMA_TXC_INT_NUM; enIrqRegistration(&stcIrqRegiCfg); NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIORITY_DEFAULT); NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn); NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn); } ```
撰写答案
登录
注册新账号
关注者
0
被浏览
676
关于作者
陈云鹏
这家伙很懒,什么也没写!
提问
15
回答
5
被采纳
0
关注TA
发私信
相关问题
1
串口DMA发送数据时,数据被覆盖
2
关于串口DMA模式下rt_device_close问题
3
利用stm32f427实现usb转串口,电脑端什么也没有识别到
4
finsh 控制台 适配 RS 485请大神指点????
5
uart_sample.c 中,读串口设备时偏移量pos要设置为-1而不是0?
6
【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常
7
串口无法接受数据,但可以发送
8
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
9
串口接收使用方式问题
10
雅特力FINSH问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
esp32 s3使用cherryusb cdc
2
【Vision Board 创客营】Vision Board上的DAC实践
3
【Vision Board创客营连载体验】RA8D1 Vision Board 实现 FAL 同时调用片上以及外挂 Flash
4
NXP MCXN947开箱照
5
基于FRDM-MCXN94的TFT模块评测
热门标签
RT-Thread Studio
串口
LWIP
SPI
Env
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
PWM
潘多拉开发板_Pandora
定时器
ADC
BSP
中断
编译报错
socket
keil_MDK
GD32
MicroPython
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
flashDB
本月问答贡献
用户名由3_15位
17
个答案
3
次被采纳
xiaorui
7
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
踩姑娘的小蘑菇
15
个答案
2
次被采纳
三世执戟
32
个答案
1
次被采纳
本月文章贡献
比特饼干
2
篇文章
6
次点赞
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
3
次点赞
xusiwei1236
2
篇文章
3
次点赞
yinxiangxv
2
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部