OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5818|回复: 1

初学stm32,仿照原子哥的DMA发送,写了接收,不知道是不是溢出问题,原子哥求助

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-7-27
在线时间
0 小时
发表于 2015-8-24 15:21:21 | 显示全部楼层 |阅读模式
5金钱
int main(void)
{   // u8 k;
  // u16 i;
  // u8 t=0,j,mask=0;
float pro=0;//进度
u16 count_temp=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组 2
delay_init(168); //初始化延时函数
Initial_UART1(115200); //初始化串口波特率为 115200
/*DMA2,STEAM7,CH4,外设为串口 1,存储器为 SendBuff,长度为:SEND_BUF_SIZE.*/
USART1DMAConfig(RECIEVEBuff,RECIEVE_BUF_SIZE);


while(1)
{
//USART_ReceiveData
   //USART_ClearITPendingBit(USART1, USART_IT_RXNE);
USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE); //使能串口 1 的 DMA 接收
USART1DMA_Enable(DMA2_Stream5,RECIEVE_BUF_SIZE); //开始一次 DMA 传输!

//等待 DMA 传输完成,此时我们来做另外一些事,点灯
//实际应用中,传输数据期间,可以执行另外的任务
while(1)
{
if(DMA_GetFlagStatus(DMA2_Stream5,DMA_FLAG_TCIF5)!=RESET)  //等待 DMA2_Steam7 

传输完成
{
DMA_ClearFlag(DMA2_Stream5,DMA_FLAG_TCIF5);//清传输完成标志
count_temp++;
break;
}
pro=DMA_GetCurrDataCounter(DMA2_Stream5);//得到当前剩余数据数
pro=1-pro/RECIEVE_BUF_SIZE;//得到百分比 
pro*=100; //扩大 100 倍
}

}
}


以上是我的主函数。我的接收数组大小设置为10,但不知道什么问题,接收到的一个数老是有问题,我先是发送的1234567890,接收如第一个图,再是发9876543210,接收如第二个图。第一次接触stm32,看了芯片中文手册,是不是因为溢出问题哦(猜想),但我不知道该怎么解决。

最佳答案

查看完整内容[请看2#楼]

已经解决了,加了一个 USART_ClearITPendingBit(USART1, USART_IT_RXNE);
众里寻他千百度,蓦然回首那人却在灯火阑珊处
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-7-27
在线时间
0 小时
 楼主| 发表于 2015-8-24 15:21:22 | 显示全部楼层
已经解决了,加了一个 USART_ClearITPendingBit(USART1, USART_IT_RXNE);
众里寻他千百度,蓦然回首那人却在灯火阑珊处
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 07:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表