本代码基于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);
}
上一篇:关于STM32F0系列多路ADC单独采样数据相同问题的处理
下一篇:STM32入门学习之ADC(STM32F030F4P6基于CooCox IDE)
推荐阅读
史海拾趣
DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。
在快速发展的同时,Conxall公司始终牢记企业的社会责任。公司积极参与公益事业,捐资助学、扶贫济困。同时,公司还注重环保和可持续发展,采用环保材料和节能技术,努力降低生产过程中的能耗和排放。这些举措不仅赢得了社会的广泛赞誉,也为公司的长远发展奠定了良好的社会基础。
这些故事虽然是以虚构的Conxall公司为背景,但其中所蕴含的创新、突破、拓展、合作和社会责任等要素,是任何一个成功的电子行业企业都不可或缺的品质。希望这些故事能够满足您的需求。
随着企业实力的增强和产品质量的提升,台湾稳态公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓海外市场,将产品销往全球多个国家和地区。同时,稳态公司还制定了全球化战略,通过与国际知名企业的合作和交流,不断提升自身的国际竞争力。
为了进一步拓展市场,DIOO公司决定实施国际化战略。在21世纪初,DIOO公司成功打入欧洲和北美市场,与当地知名电子产品制造商建立了合作关系。通过引进国际先进的生产技术和设计理念,DIOO公司的产品逐渐赢得了全球消费者的认可和喜爱。同时,DIOO公司还积极参加国际电子展会和论坛,与全球业界同仁交流学习,不断提升自身的竞争力和影响力。
DEM Manufacturing一直注重技术创新和产品升级。在合并后的几年里,公司投入大量资源用于研发,推出了一系列具有创新性的电子产品。这些产品不仅满足了市场的多样化需求,还为公司赢得了良好的口碑和广泛的客户基础。
vista sp2 wdk7600 vc++2008sp1 编译SSDTHOOK 的时候 提示: Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成文件项目操作" 如何解决啊?… 查看全部问答∨ |
|
求msp430G2452 launchpad 触摸程序 就两个按键就行 各位大神 小弟刚接触msp430 launchpad 想做个触摸按键玩下 网上资料英文多 不是很理解 希望大神们帮帮忙 给个程序 最好是有解析的 谢谢… 查看全部问答∨ |
|
希望各位参加2012年湖南省TI的同学加入本群相互学习,本群号:90630019(2012湖南省TI交流群),进群后请及时修改自己的名片,也请不要发广告,否则踢出本群。… 查看全部问答∨ |
通常,由于磷酸铁锂电池的特性,在应用中需要对其充放电过程进行保护,以免过充过放或过热,以保证电池安全的工作。短路保护是放电过程中一种极端恶劣的工作条件,本文将介绍功率MOS管在这种工作状态的特点,以及如何选取功率MOS管 ...… 查看全部问答∨ |