你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
UART如何使用DMA发送多次数据
[复制链接]
py
提问时间:2013-10-8 11:24 /
我根据库例程在配置UART和DMA之后,想在主程序中能用DMA进行多次UART的发送,
调用 USART_DMACmd(UART4, USART_DMAReq_Tx, ENABLE);
DMA_Cmd (DMA2_Channel5,ENABLE); 能成功发送一次数据,但是接下来就不能正常发送了。
而DMA_GetFlagStatus(DMA2_FLAG_TC5)==SET始终不能满足,不管是用中断去判断还是循环去读。是什么地方出错了呢?
赞
0
收藏
0
评论
6
分享
发布时间:2013-10-8 11:24
举报
请先
登录
后回复
6个回答
Hiker天下
回答时间:2013-10-9 15:19:17
a0a.1 0b0c
RE:UART如何使用DMA发送多次数据
DMA_SetCurrDataCounter(COM_DMA_TX_CHANNEL[COM], resLen);
赞
1
评论
回复
支持
1
反对
0
Hiker天下
回答时间:2013-10-8 13:18:29
a0a.1 0b0c
RE:UART如何使用DMA发送多次数据
第二次发送的时候要 重新配置长度。
赞
0
评论
回复
支持
反对
dzc2001
回答时间:2013-10-8 16:16:56
a0a.1 0b0c
RE:UART如何使用DMA发送多次数据
//串口DMA发送测试
Uart_Send_Buffer[0] = 1;
Uart_Send_Buffer[1] = 2;
Uart_Send_Buffer[2] = 3;
Uart_Send_Buffer[3] = 4;
Uart_Send_Buffer[4] = 5;
i = 1;
while (1)
{
//检查串口是否可以发送
while (Flag_Uart_Send);
Flag_Uart_Send = 1;
//设置传输数据长度
DMA_SetCurrDataCounter(DMA1_Channel4,i);
//打开DMA
DMA_Cmd(DMA1_Channel4,ENABLE);
i++;
if (i > 5)
{
i = 1;
}
}
赞
0
评论
回复
支持
反对
狼
回答时间:2013-10-8 21:35:59
a0a.1 0b0c
RE:UART如何使用DMA发送多次数据
这是发送的中断处理函数,你看看自己有没有哪里弄错了
//串口1DMA方式发送中断
void DMA1_Channel4_IRQHandler(void)
{
//清除标志位
DMA_ClearFlag(DMA1_FLAG_TC4);
//DMA_ClearITPendingBit(DMA1_FLAG_TC4);
//DMA1->IFCR |= DMA1_FLAG_TC4;
//关闭DMA
DMA_Cmd(DMA1_Channel4,DISABLE);
//DMA1_Channel4->CCR &= ~(1
赞
0
评论
回复
支持
反对
py
回答时间:2013-10-11 10:18:12
a0a.1 0b0c
回复:UART如何使用DMA发送多次数据
主循环里面不需要去调用
USART_DMACmd(UART4, USART_DMAReq_Tx, ENABLE);
直接就不发送数据了呢。。。
回复第 3 楼 于2013-10-08 16:16:56发表:
//串口DMA发送测试
Uart_Send_Buffer[0] = 1;
Uart_Send_Buffer[1] = 2;
Uart_Send_Buffer[2] = 3;
Uart_Send_Buffer[3] = 4;
Uart_Send_Buffer[4] = 5;
i = 1;
while (1)
{
//检查串口是否可以发送
while (Flag_Uart_Send);
Flag_Uart_Send = 1;
//设置传输数据长度
DMA_SetCurrDataCounter(DMA1_Channel4,i);
//打开DMA
DMA_Cmd(DMA1_Channel4,ENABLE);
i++;
if (i > 5)
{
i = 1;
}
}
赞
0
评论
回复
支持
反对
py
回答时间:2013-10-11 10:28:24
a0a.1 0b0c
回复:UART如何使用DMA发送多次数据
<div style="padding:5px;border:1px dashed #ccc;">不去判断DMA1_FLAG_TC4标志,直接给清除了么?
为什么要关闭DMA呢?
在主循环再送数据长度和开启DMA_Cmd么?
需要调用USART_DMACmd么?
回复第 4 楼 于2013-10-08 21:35:59发表:
这是发送的中断处理函数,你看看自己有没有哪里弄错了
//串口1DMA方式发送中断
void DMA1_Channel4_IRQHandler(void)
{
//清除标志位
DMA_ClearFlag(DMA1_FLAG_TC4);
//DMA_ClearITPendingBit(DMA1_FLAG_TC4);
//DMA1->IFCR |= DMA1_FLAG_TC4;
//关闭DMA
DMA_Cmd(DMA1_Channel4,DISABLE);
//DMA1_Channel4->CCR &= ~(1
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:UART如何使用DMA发送多次数据
RE:UART如何使用DMA发送多次数据
RE:UART如何使用DMA发送多次数据
Uart_Send_Buffer[0] = 1;
Uart_Send_Buffer[1] = 2;
Uart_Send_Buffer[2] = 3;
Uart_Send_Buffer[3] = 4;
Uart_Send_Buffer[4] = 5;
i = 1;
while (1)
{
//检查串口是否可以发送
while (Flag_Uart_Send);
Flag_Uart_Send = 1;
//设置传输数据长度
DMA_SetCurrDataCounter(DMA1_Channel4,i);
//打开DMA
DMA_Cmd(DMA1_Channel4,ENABLE);
i++;
if (i > 5)
{
i = 1;
}
}
RE:UART如何使用DMA发送多次数据
//串口1DMA方式发送中断
void DMA1_Channel4_IRQHandler(void)
{
//清除标志位
DMA_ClearFlag(DMA1_FLAG_TC4);
//DMA_ClearITPendingBit(DMA1_FLAG_TC4);
//DMA1->IFCR |= DMA1_FLAG_TC4;
//关闭DMA
DMA_Cmd(DMA1_Channel4,DISABLE);
//DMA1_Channel4->CCR &= ~(1
回复:UART如何使用DMA发送多次数据
直接就不发送数据了呢。。。
回复第 3 楼 于2013-10-08 16:16:56发表:
//串口DMA发送测试
Uart_Send_Buffer[0] = 1;
Uart_Send_Buffer[1] = 2;
Uart_Send_Buffer[2] = 3;
Uart_Send_Buffer[3] = 4;
Uart_Send_Buffer[4] = 5;
i = 1;
while (1)
{
//检查串口是否可以发送
while (Flag_Uart_Send);
Flag_Uart_Send = 1;
//设置传输数据长度
DMA_SetCurrDataCounter(DMA1_Channel4,i);
//打开DMA
DMA_Cmd(DMA1_Channel4,ENABLE);
i++;
if (i > 5)
{
i = 1;
}
}
回复:UART如何使用DMA发送多次数据
为什么要关闭DMA呢?
在主循环再送数据长度和开启DMA_Cmd么?
需要调用USART_DMACmd么?
回复第 4 楼 于2013-10-08 21:35:59发表:
这是发送的中断处理函数,你看看自己有没有哪里弄错了
//串口1DMA方式发送中断
void DMA1_Channel4_IRQHandler(void)
{
//清除标志位
DMA_ClearFlag(DMA1_FLAG_TC4);
//DMA_ClearITPendingBit(DMA1_FLAG_TC4);
//DMA1->IFCR |= DMA1_FLAG_TC4;
//关闭DMA
DMA_Cmd(DMA1_Channel4,DISABLE);
//DMA1_Channel4->CCR &= ~(1