OpenEdv-开源电子网

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

DMA+USART STM32F030无反应,配置哪里出问题呢?

[复制链接]

30

主题

104

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
456475
金钱
456475
注册时间
2014-8-23
在线时间
59 小时
发表于 2014-8-23 14:34:13 | 显示全部楼层 |阅读模式
5金钱
写了个很简单的测试程序.
[mw_shl_code=c,true]#include "stm32f0xx.h" #define GPIO_AF_USART1 GPIO_AF_1 const uint32_t SRC_Const_Buffer[32] = { 0x01020304, 0x05060708, 0x090A0B0C, 0x0D0E0F10, 0x11121314, 0x15161718, 0x191A1B1C, 0x1D1E1F20, 0x21222324, 0x25262728, 0x292A2B2C, 0x2D2E2F30, 0x31323334, 0x35363738, 0x393A3B3C, 0x3D3E3F40, 0x41424344, 0x45464748, 0x494A4B4C, 0x4D4E4F50, 0x51525354, 0x55565758, 0x595A5B5C, 0x5D5E5F60, 0x61626364, 0x65666768, 0x696A6B6C, 0x6D6E6F70, 0x71727374, 0x75767778, 0x797A7B7C, 0x7D7E7F80 }; void USART1_Test() { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; DMA_InitTypeDef DMA_InitStructure; //打开时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //GPIO复用 GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART1); //串口IO初始化公共部分 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //TX IO 初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //RX IO 初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOA, &GPIO_InitStructure); //配置串口 USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); //初始化串口 USART_Cmd(USART1, ENABLE); //配置DMA,TDR寄存器填写. DMA_DeInit(DMA1_Channel2); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->TDR); //外设寄存器地址 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SRC_Const_Buffer;//待发送缓冲区 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//外设作为目标地址 DMA_InitStructure.DMA_BufferSize = 32;//传输大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不变 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//源地址递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//每次发送都是Byte DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;//字节 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//单次传输 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//中等优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//不是内存到内存传输 DMA_Init(DMA1_Channel4, &DMA_InitStructure);//初始化 //使能DMA USART传输 USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE); DMA_Cmd(DMA1_Channel2, ENABLE); } int main(void) { USART1_Test(); for(;;) { } } [/mw_shl_code]
串口配置是没错的,用USART_SendData试过,但是加上DMA不知道如何配置,反正现在没法送数据出来.程序简化成这样了,有注释,求助大家帮忙看看.

最佳答案

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

回复【2楼】正点原子: --------------------------------- DMA_Init(DMA1_Channel4, &DMA_InitStructure);//初始化 DMA_Cmd(DMA1_Channel2, ENABLE); 不一致啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-8-29
在线时间
2 小时
发表于 2014-8-23 14:34:14 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
DMA_Init(DMA1_Channel4, &DMA_InitStructure);//初始化
DMA_Cmd(DMA1_Channel2, ENABLE);
不一致啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-23 23:30:43 | 显示全部楼层
帮顶....
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-29 23:34:04 | 显示全部楼层
回复【3楼】f3597908:
---------------------------------
谢谢指出
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

30

主题

104

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
456475
金钱
456475
注册时间
2014-8-23
在线时间
59 小时
 楼主| 发表于 2014-9-13 14:40:05 | 显示全部楼层
回复【3楼】f3597908:
---------------------------------
Thx
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-10
在线时间
16 小时
发表于 2016-5-26 22:45:54 | 显示全部楼层
你好,你的DMA+Usart在stm32f030上最终调好了吗?
回复

使用道具 举报

30

主题

104

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
456475
金钱
456475
注册时间
2014-8-23
在线时间
59 小时
 楼主| 发表于 2016-5-27 07:00:17 | 显示全部楼层
alisa 发表于 2016-5-26 22:45
你好,你的DMA+Usart在stm32f030上最终调好了吗?

二楼已经解决我问题
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-10
在线时间
16 小时
发表于 2016-5-27 17:09:30 | 显示全部楼层
cl17726 发表于 2016-5-27 07:00
二楼已经解决我问题

楼主,你好,可否分享下你的代码?比如发送接收的代码?我看你的初始化中没有开dma或者Usart的中断,你是怎样发送和接收数据的呢?请指点,谢谢
回复

使用道具 举报

30

主题

104

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
456475
金钱
456475
注册时间
2014-8-23
在线时间
59 小时
 楼主| 发表于 2016-5-27 18:12:04 | 显示全部楼层
alisa 发表于 2016-5-27 17:09
楼主,你好,可否分享下你的代码?比如发送接收的代码?我看你的初始化中没有开dma或者Usart的中断,你是 ...

我就打错一个字,其他都对啊
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-10
在线时间
16 小时
发表于 2016-5-29 17:53:00 | 显示全部楼层
cl17726 发表于 2016-5-27 18:12
我就打错一个字,其他都对啊

好的,我按照你的代码试试,谢谢你!另外,我自己写的USART中断方式的代码,不知为什么始终不能进入接收中断,麻烦你帮忙看看好吗?谢谢了!
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-6-10
在线时间
16 小时
发表于 2016-5-29 17:54:11 | 显示全部楼层
代码如下,调死我了,就是进不了中断

stm32f030_protect.rar

4.22 MB, 下载次数: 1617

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 22:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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