历史上的今天

今天是:2024年09月26日(星期四)

正在发生

2021年09月26日 | STM32入门学习之DMA(STM32F030F4P6基于CooCox IDE)

发布者:蓝天飞行 来源: eefocus关键字:STM32  DMA  CooCox  IDE 手机看文章 扫描二维码
随时随地手机看文章

本代码基于STM32F030F4P6,用例为DMA控制串口发送,需要注意以下几点


1、注意串口IO配置,包括IO配置和复用功能选择


2、STM32F030系列的DMA不支持外设到外设,STM32F030只有DMA1,没有DMA2


3、注意不同外设对应不同DMA通道,而且不同芯片的通道也不一定相同,注意看数据手册


直接代码如下:


#include "stm32_lib/inc/stm32f0xx_rcc.h"

#include "stm32_lib/inc/stm32f0xx_gpio.h"

#include "stm32_lib/inc/stm32f0xx_usart.h"

#include "stm32_lib/inc/stm32f0xx_dma.h"

 

//以下两种地址写法都可以

#define USART1_TDR_Address ((uint32_t)(USART1_BASE+0x28))

//#define USART1_TDR_Address (uint32_t)(&USART1->TDR)

 

unsigned char hellStr[]={'H','E','L','L','O'};

 

void RCC_Config(void);

void GPIO_Config(void);

void USART_Config(void);

void DMA_Config(void);

 

int main(void)

{

 

SystemInit();

 

RCC_Config();

GPIO_Config();

USART_Config();

DMA_Config();

 

//使能DMA通道2,意味着开始传输

DMA_Cmd(DMA1_Channel2,ENABLE);

 

while (1)

{

 

}

}

 

void RCC_Config(void)

{

//时钟配置

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

}

void GPIO_Config(void)

{

//选择引脚

//针对F030F4P6,TX有PA2和PA9可选,RX有PA3和PA10可选,特别注意查看文档是AF多少

//GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);

//GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

//引脚设置

GPIO_InitTypeDef PORT_UART1_TX; //定义TX脚,PORT_UART1_TX是自定义名称,可以任意

PORT_UART1_TX.GPIO_Pin = GPIO_Pin_9; //此参数根据上面选择的引脚来定

PORT_UART1_TX.GPIO_Speed = GPIO_Speed_10MHz;

PORT_UART1_TX.GPIO_Mode = GPIO_Mode_AF;

PORT_UART1_TX.GPIO_PuPd = GPIO_PuPd_NOPULL;

//IO初始化

GPIO_Init(GPIOA, &PORT_UART1_TX);

 

GPIO_InitTypeDef PORT_UART1_RX; //定义RX脚

PORT_UART1_RX.GPIO_Pin = GPIO_Pin_10; //此参数根据上面选择的引脚来定

PORT_UART1_RX.GPIO_Speed = GPIO_Speed_10MHz;

PORT_UART1_RX.GPIO_Mode = GPIO_Mode_AF;

PORT_UART1_RX.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOA, &PORT_UART1_RX);

}

 

void USART_Config(void)

{

//串口参数配置

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 115200; //设置波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置数据长度

USART_InitStructure.USART_Parity = USART_Parity_No; //设置奇偶校验

USART_InitStructure.USART_StopBits = USART_StopBits_1; //设置停止位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //设置流控制

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //设置模式

USART_Init(USART1, &USART_InitStructure);

//使能DMA发送

USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//串口1发射 DMA使能

//使能

USART_Cmd(USART1, ENABLE);

}

 

void DMA_Config(void)

{

//特别注意,对于STM32F030F4P6,USART1_TX对应通道2,注意看数据手册

DMA_DeInit(DMA1_Channel2);

DMA_InitTypeDef DMA_InitStructure;

DMA_InitStructure.DMA_PeripheralBaseAddr=USART1_TDR_Address;

DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)hellStr;

DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;

DMA_InitStructure.DMA_BufferSize=5;

DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;

DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;

DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;

DMA_InitStructure.DMA_Priority=DMA_Priority_High;

DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;

DMA_Init(DMA1_Channel2,&DMA_InitStructure);

}

关键字:STM32  DMA  CooCox  IDE 引用地址:STM32入门学习之DMA(STM32F030F4P6基于CooCox IDE)

上一篇:关于STM32F0系列多路ADC单独采样数据相同问题的处理
下一篇:STM32入门学习之ADC(STM32F030F4P6基于CooCox IDE)

推荐阅读

在传统的工业机器人逐渐取代单调、重复性高、危险性强的工作之时,协作机器人也将会慢慢渗入各个工业领域,与人共同工作。2017年,协作机器人(cobots)开始引领机器人市场增长。根据BIS Research的研究数据显示,到2021年,协作机器人的市场销量将达到15万台,销售额有望增至20亿美元。一些产业开始将引入协作机器人作为寻求新的自动化未来的一种方式...
iphone11系列自9月20日发售以来,被广为吐槽,信号差,发烫,如今又陷入了“进灰门”。此前,有不少网友吐槽,iPhone 11亲测发烫严重,尤其是激活的时候以及导数据等使用场景。还有网友表示,发热位置主要集中在摄像头下方附近和开机键附近。至于信号问题,iPhone 11 系列仍旧采用英特尔基带,确实没有高通基带那么稳定,在地下车库等场景的信号确实还...
华为云业务总裁郑叶来在华为全联接2020上表示,伴随着计算基础软件openEuler、openGauss、openLooKeng以及AI框架MindSpore如期开源,华为合作伙伴推出的鲲鹏服务器出货量市场占有率已超50%。华为Cloud&AI BG总裁侯金龙在3月的华为开发者大会2020上宣布,目前华为云开发者目前已增长至160万。同时华为将在2020年投入2亿美元推动鲲鹏计算产业发展,届时受惠...
新能源汽车的充电和续航问题一直是车主的一大心病,很多车主可能都有过在充电桩旁无所事事的经历,尤其是冬夏两季,在室外等充电的这段时间往往会变得异常难熬。因此,汽车电池的快充技术也就成了近年来各方研究的重点。近日,在2021中关村论坛上,北京低碳清洁能源研究院院长卫昶表示,该院研究人员已经自主研发了一款新型快充锂电池,能够在5分钟内充满...

史海拾趣

问答坊 | AI 解惑

模拟除法器 单电源供电 低功耗 大家推荐个片子

初涉模拟电路 要做一个模拟除法器 但电源供电 低功耗 低噪声 四象限 大家推荐个片子 多谢…

查看全部问答∨

232程序的编写

怎样判断RS232传输的是起始位还是中间的数据 例如:10000100001000011100(无奇偶校验位) 这些是上位机的事情吗?…

查看全部问答∨

《VHDL基础及经典实例开发》

本帖最后由 paulhyde 于 2014-9-15 09:20 编辑 《VHDL基础及经典实例开发》  …

查看全部问答∨

编译的时候提示错误。

vista sp2   wdk7600 vc++2008sp1 编译SSDTHOOK 的时候 提示: Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成文件项目操作" 如何解决啊?…

查看全部问答∨

最近,要开发一个串口监控程序,120个点,一台电脑监控,是不是要开辟120线程呀?

最近,要开发一个串口监控程序,120个点,一台电脑监控,是不是要开辟120线程呀? …

查看全部问答∨

解锁被锁的AVR芯片

一块Atmega128的芯片在由于配置熔丝位时不小心给锁死了,请问一下,有什么办法解锁吗?…

查看全部问答∨

求msp430G2452 launchpad 触摸程序 就两个按键就行

各位大神 小弟刚接触msp430 launchpad 想做个触摸按键玩下 网上资料英文多 不是很理解 希望大神们帮帮忙 给个程序 最好是有解析的 谢谢…

查看全部问答∨

2012湖南省TI设计大赛交流群

希望各位参加2012年湖南省TI的同学加入本群相互学习,本群号:90630019(2012湖南省TI交流群),进群后请及时修改自己的名片,也请不要发广告,否则踢出本群。…

查看全部问答∨

功率MOS管的锂电池保护电路

   通常,由于磷酸铁锂电池的特性,在应用中需要对其充放电过程进行保护,以免过充过放或过热,以保证电池安全的工作。短路保护是放电过程中一种极端恶劣的工作条件,本文将介绍功率MOS管在这种工作状态的特点,以及如何选取功率MOS管 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved