OpenEdv-开源电子网

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

以DMA方式使用串口收发数据,发送数据时正常,但是接收数据时无法实现

[复制链接]

22

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2015-4-20
在线时间
0 小时
发表于 2015-7-17 09:41:03 | 显示全部楼层 |阅读模式
5金钱
以DMA方式使用串口收发数据,
单独发送数据时正常,可以在串口助手打印出来
但是单独接收数据时,在串口助手 “发送”数据,例如“1”,无法在终端打印出来

以下是程序:

/*********************************ADC.c****************************************************************/
//注释掉的为串口发送
#include "dma.h"
u8 SendBuff[BuffSize];
u8 value;
void USRAT1_DMA_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

//DMA_InitStructure.DMA_BufferSize=BuffSize;              
DMA_InitStructure.DMA_BufferSize=1;
//DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
//DMA_InitStructure.DMA_MemoryBaseAddr=(u32)SendBuff;
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)(&value);
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;
DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;
DMA_InitStructure.DMA_PeripheralBaseAddr=(int)(&USART1->DR);
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
//DMA_Init(DMA1_Channel4,&DMA_InitStructure);
//DMA_Cmd(DMA1_Channel4,ENABLE);
DMA_Init(DMA1_Channel5,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel5,ENABLE);
}



/*********************************main.c****************************************************************/
#include "LED.h"
#include "usart1.h"
#include "stdio.h"
#include "dma.h"

extern  u8 SendBuff[BuffSize];
extern  u8 value;

int main(void)
{
u16 i;
LED_BEEP_Init();
KEY_Init();
delay_init();
EXTIX_Init(); NVIC_Configuration();
USART1_Init(9600);
 USRAT1_DMA_Init();

// //以DMA方式使用串口发送数据
//  LED0=0;
// printf("\r\n\r\n usart1 DMA!\r\n\r\n");
// for(i=0;i<BuffSize;i++)
// {
//      SendBuff='b';
// }
// for(;;)
// {
// LED1=0;
// delay_ms(100);
// LED1=1;
// delay_ms(100);
// }

//以DMA方式使用串口接收数据
printf("\r\n\r\n usart1 DMA!!!\r\n\r\n");
USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);
printf("%c",value);

for(;;)
{
LED1=0;
delay_ms(100);
LED1=1;
delay_ms(100);
}
}


最佳答案

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

论坛有相关例程,搜索下,参考别人的例程先。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-17 09:41:04 | 显示全部楼层
论坛有相关例程,搜索下,参考别人的例程先。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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