Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DMA
串口
HC32F4
HC32F460 串口DMA接收问题
发布于 2022-11-15 17:23:08 浏览:946
订阅该版
以前用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
被浏览
946
关于作者
陈云鹏
这家伙很懒,什么也没写!
提问
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
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
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
使用RC522软件包驱动FM1722
2
常量数据类型和表达式陷阱分享
3
进行i2c驱动移植的经验总结
4
在VSCode中使用clang-format
5
我该如何使用这个微雪的WIFI400 WIFI-LPB-100在rtt里或者我该怎样为它开发驱动
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
289
次被采纳
张世争
809
个答案
175
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部