历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-09-26 来源:eefocus

本代码基于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);

}

推荐阅读

史海拾趣

ERP公司的发展小趣事

面对不断变化的市场环境和客户需求,电子智链始终保持创新和进取的精神。公司不断投入研发资源,推出新的ERP产品和解决方案,以满足客户日益增长的需求。同时,电子智链也积极应对来自国内外竞争对手的挑战,通过不断提高产品质量和服务水平来巩固自身的市场地位。在未来的发展中,电子智链将继续秉持“客户至上、创新驱动”的理念,致力于为电子企业提供更加先进、高效和可靠的ERP解决方案。

ENPIRION公司的发展小趣事

经过数年的研发和技术积累,ENPIRION公司在2004年推出了其首款革命性的产品——将电感集成的DCDC芯片。这款产品的问世引起了业界的广泛关注,因为它极大地减小了负载点稳压所需要的PCB面积和高度,实现了最高功率密度和最小外形封装。这一创新不仅获得了EDN 2004年度全球电源IC最佳产品奖,还赢得了其他众多国际大奖,为ENPIRION公司赢得了业界的广泛认可。

CalAmp公司的发展小趣事

在业务拓展方面,CalAmp公司始终保持着敏锐的市场洞察力。某年,公司成功推出了RFID动物溯源和共享单车智能等新业务。这些新业务不仅为公司带来了新的增长点,也进一步拓宽了其业务范围。虽然新产品线的毛利率较低,对公司的整体毛利率和净利率产生了一定影响,但公司通过优化成本结构和提升运营效率,逐步改善了这一状况。同时,公司与澳大利亚利德品有限公司签订的品牌授权及合作协议,也为公司未来的盈利能力提升奠定了基础。

Eagle Plastic Devices公司的发展小趣事

进入21世纪后,随着信息化和智能化技术的快速发展,Eagle Plastic Devices公司开始积极推动数字化转型和智能制造。公司引入了先进的信息化管理系统和智能生产设备,实现了生产过程的自动化和智能化。这不仅提高了生产效率和产品质量,还降低了生产成本和人力资源投入。同时,公司还利用大数据和人工智能技术优化供应链管理、市场营销等方面的工作,进一步提升了公司的综合竞争力。

EMBEST公司的发展小趣事

随着国内市场的逐步稳固,EMBEST开始寻求更广阔的发展空间。XXXX年,EMBEST的开发工具成功进入国际市场,并获得了多家芯片公司的认可,成为他们的第三方工具伙伴。这一举措不仅提升了EMBEST的品牌影响力,也为其带来了更多的商业机会。EMBEST凭借过硬的技术实力和优质的服务,逐渐在国际市场上崭露头角。

Deutron Electronics Corp公司的发展小趣事

在技术优势的基础上,Deutron Electronics Corp开始了积极的市场拓展和品牌建设工作。公司参加了多个国际电子展会,展示了其创新产品和技术实力,成功吸引了众多潜在客户的关注。同时,公司还加大了对品牌宣传的投入,通过广告、公关等手段提升了品牌知名度和美誉度。这些努力使得Deutron Electronics Corp的产品逐渐在市场上占据了一席之地。

问答坊 | AI 解惑

求~ GPRS 的AT指令~

刚用西门子的 C60加上 移动的飞信 做了个随机聊天 的东西.... 不过貌似不好玩.. 后来发现这手机貌似还能当GPRS模块用~ at+cgdcont=1,\"ip\",\"cmnet\" OK at+cgdcont? +CGDCONT: 1,\"IP\",\"cmnet\",\"\",0,0 OK 不知道这两条指令具体 ...…

查看全部问答>

谁有学习遥控器的代码参考啊?

各位大侠,最近在做学习型遥控器,可是老是不对,那位好心的人给个代码参考一下啊?…

查看全部问答>

有在深圳做WINCE开发吗?找兼职

有在深圳做WINCE开发吗?我公司现在准备找一个做这方面的人来给我们开发一个程序,兼职方式,联系QQ:396638838,邮件:jzy123791@163.com…

查看全部问答>

如何在WM上显示文件扩展名出来?还有就是WM上有没有象UltraEdit之类的超级编辑器?

如何在WM上显示文件扩展名出来?还有就是WM上有没有象UltraEdit之类的超级编辑器?…

查看全部问答>

有哪位用过STM32L的,仿真器选择哪一款

我用STM32L15XX的芯片,仿真器不知该选哪一个,请各位高手指点一下…

查看全部问答>

LED封装技术探讨

LED的封装有:支架排封装,贴片封装,模组封装几种,这些封装方法都是我们常见和常用的。  一,常规现有的封装方法及应用领域   支架排封装是最早采用,用来生产单个LED器件,这就是我们常见的引线型发光二极管(包括食人鱼封装),它适合做仪器 ...…

查看全部问答>

ADI技术指南合集

ADI技术指南合集 1.电路仿真和PCB设计 2.放大器 3.开关和基准源 4.模数转换器 5.射频及高速器件 6.数模转换器 下载链接:https://download.eeworld.com.cn/detail/chen8710/282754 https://download.eeworld.com.cn/detail/chen8710/282754 ...…

查看全部问答>

【学习心得+电源】充分认识常用的LDO(低压差线性稳压器)

刚开始接触LDO的时候,并不知道是什么意思,终于在偶然的一次参加TI组织的模拟产品研讨会上才开始对它有了比较全面的了解。那个时候是没有机会接触这个LDO的,最多的就是知道7805 7806 7812 7815 7824这些芯片,当时为了一次性买齐全这些型号,把自 ...…

查看全部问答>