OpenEdv-开源电子网

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

DMA串口接收开始乱码,随后正常

[复制链接]

11

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2016-7-17
在线时间
25 小时
发表于 2016-8-2 22:56:21 | 显示全部楼层 |阅读模式
8金钱
本帖最后由 Illidan 于 2016-8-3 07:40 编辑

代码如下:
#include "LED.h"
#include "DMA.h"
#include "KEY.h"
#include "stm32f4xx.h"
#include "delay.h"
#include "usart.h"

#define SEND_BUF_SIZE 8200

u8 SENDBUFF[SEND_BUF_SIZE];
u8 TEXTBUFF[]={"ALIENTEK Explorer STM32F4 DMA ′®¿úêμÑé"};

int main(void)
{
        u8 j,t;
        u16 i;
        LED_init();
        delay_init(168);
        key_init();
        uart_init(115200);
        led1=0;
        USART_DMACmd(USART1,USART_DMAReq_Tx,DISABLE);
        MYDMA_Config(DMA2_Stream7,DMA_Channel_4,(u32)&USART1->DR,(u32)SENDBUFF,SEND_BUF_SIZE);
        j=sizeof(TEXTBUFF);
        for(i=0;i<SEND_BUF_SIZE;i++)
        {
                SENDBUFF=TEXTBUFF[t];
                t++;
                if(t==j)
                {
                        SENDBUFF[i++]=0x0d;
                        SENDBUFF[i++]=0x0a;
                        t=0;
                }
        }
        i=0;
        while(1)
        {
                if(key_scan(0)==1)
                {
                        USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
                        MYDMA_Enable(DMA2_Stream7,SEND_BUF_SIZE);
                        while(!DMA_GetFlagStatus(DMA2_Stream7,DMA_FLAG_TCIF7));
                        DMA_ClearFlag(DMA2_Stream7,DMA_FLAG_TCIF7);
                }
        }

}


一开始接收不正常,后面的就没问题了

一开始接收不正常,后面的就没问题了

改了一下接收数组的长度就没问题

改了一下接收数组的长度就没问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-5-29
在线时间
12 小时
发表于 2016-8-2 23:50:20 | 显示全部楼层
时序没有对上,你把程序暂停,串口软件清屏。程序reset就好了
回复

使用道具 举报

11

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2016-7-17
在线时间
25 小时
 楼主| 发表于 2016-8-3 07:32:00 | 显示全部楼层
壁虎 发表于 2016-8-2 23:50
时序没有对上,你把程序暂停,串口软件清屏。程序reset就好了

我初学者,怎么暂停?怎么清屏?我在网上没有找到相应的做法
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-8-3 20:19:21 | 显示全部楼层
直接用的我们例程么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2016-7-17
在线时间
25 小时
 楼主| 发表于 2016-8-3 20:52:51 | 显示全部楼层
正点原子 发表于 2016-8-3 20:19
直接用的我们例程么?

没有,我修改了部分,没有用液晶,直接将内存的数据转移到串口发送。

MYDMA_Config(DMA2_Stream7,DMA_Channel_4,(u32)&USART1->DR,(u32)SENDBUFF,SEND_BUF_SIZE);
        j=sizeof(TEXTBUFF);
        for(i=0;i<SEND_BUF_SIZE;i++)
        {
                SENDBUFF=TEXTBUFF[t];
                t++;
                if(t==j)
                {
                        SENDBUFF[i++]=0x0d;
                        SENDBUFF[i++]=0x0a;
                        t=0;
                }
        }
        i=0;
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 00:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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