stm32f103串口dma配置实例

发布者:MysticalDreamer最新更新时间:2019-01-07 来源: eefocus关键字:stm32f103  串口  dma配置 手机看文章 扫描二维码
随时随地手机看文章

1. 串口配置



void USART3_Configuration(uint32_t Baudrate)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;

GPIO_Init(GPIOB,&GPIO_InitStructure);


USART_InitStructure.USART_BaudRate=Baudrate;

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(USART3,&USART_InitStructure);

USART_ITConfig(USART3, USART_IT_IDLE,ENABLE);

USART_Cmd(USART3,ENABLE);


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure); 

}

2.DMA配置



void DMA_USART3Rx_Init(void)

{

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

DMA_DeInit(DMA1_Channel3);

DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&USART3->DR;

DMA_InitStructure.DMA_MemoryBaseAddr=(u32)USART3_DMA_Rxbuf;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize=DMA1_MEM_LEN;

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_VeryHigh;

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA1_Channel3,&DMA_InitStructure);  


DMA_Cmd(DMA1_Channel3,ENABLE);

USART_DMACmd(USART3,USART_DMAReq_Rx,ENABLE);

}

3.串口中断处理



void USART3_IRQHandler(void)

{

int temp = 0;

unsigned int i=0;

if(USART_GetITStatus(USART3,USART_IT_IDLE)!=RESET)

{

temp = USART3->SR;

temp = USART3->DR;

DMA_Cmd(DMA1_Channel3,DISABLE); 

temp=DMA_GetCurrDataCounter(DMA1_Channel3);

Rx_Len=USART_BUF_MAX-DMA_GetCurrDataCounter(DMA1_Channel3);

if(Rx_Len>=USART_BUF_MAX)

{


}

else

{

if(USART_data_flag==0)

{

for(i=0;i

DMA_Rxbuf[i]=USART3_DMA_Rxbuf[i];

DMA_Rxbuf[i]='\0';

}

USART_EOF=1;

}

DMA_SetCurrDataCounter(DMA1_Channel3,USART_BUF_MAX); 

DMA_Cmd(DMA1_Channel3,ENABLE);

temp=temp;

}

}

备注:在此串口接收函数中 如果接收的数据大于接收buffer 则会出错 需要防止这种错误

关键字:stm32f103  串口  dma配置 引用地址:stm32f103串口dma配置实例

上一篇:STM32F103之DMA实验,内存通过DMA向串口1发送数据
下一篇:stm32f103串口实用DMA实现收发

推荐阅读最新更新时间:2024-03-16 16:22

STM32串口发送数据和接收数据方式总结
之前写了篇关于ESP8266使用AT指令进行互相通讯的实验,在写STM32串口接发数据的程序中,觉得有必要将之前学的有关于串口方面的使用经历加以总结。 串口发送数据: 1. 串口发送数据最直接的方式就是标准调用库函数 。 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); 第一个参数是发送的串口号,第二个参数是要发送的数据了。但是用过的朋友应该觉得不好用,一次只能发送单个字符,所以我们有必要根据这个函数加以扩展。 void Send_data(u8 *s) { while(*s!='\0') { while(USART_GetFla
[单片机]
ATmega128学习(MOdbus串口通信)
//ATmega128 AU USART1,波特率9600,modbus协议,单速,1停止位,CRC校验 //编译器 :ICC7.22 //晶振:11.0592MHZ,,外部高频石英震荡器,启动时间4.1ms //熔丝:扩展位:0xff, 0x19af,加密位:0xff //*********************************************************************** // 初始化去,参数定义区 //*********************************************************************** #include #inclu
[单片机]
一种 keil5 锁一种 keil5 锁死 STM32F103C8T6的
先前 画的一款 电机驱动板, 今天总算有时间调试了,,, 效果如上, 实验室里面的洗板水用没了。。。。 没有办法收拾的干净了, LED 没了。。。 接线端子 开关也没了。。。 条件很艰苦 进入 正题 , 上图主控是 STM32F103C8T6 就是网上卖的最便宜的那种。出现的问题时 keil 下载不进去程序。提示是这样玩的 我先用j-link 自带的工具j-flash 进行了测试 确定了 芯片是可以通讯 并且可以进行 hex文件的烧录的。 这样定位问题应该是keil 的配置出了问题。 keil 也不是一直出问题。 某一次 也是可以下载的。 经过多次尝试,我发现 当我用 j-flash 擦除芯片 并且解锁 unsec
[单片机]
一种 keil5 锁一种 keil5 锁死 <font color='red'>STM32F103</font>C8T6的
STM32串口发送中断
SECTION 2 先说TC。即Transmission Complete。发送一个字节后才进入中断,这里称为 发送后中断 。和原来8051的TI方式一样,都是发送后才进中断,需要在发送函数中先发送一个字节触发中断。发送函数如下 /* 功能:中断方式发送字符串.采用判断TC的方式.即 判断 发送后中断 位. 输入:字符串的首地址 输出:无 */ void USART_SendDataString( u8 *pData ) { pDataByte = pData; USART_ClearFlag(USART1, USART_FLAG_TC);//清除传输完成标志位,否则可能会丢失第1个字节的数据.网友提供.
[单片机]
STM32<font color='red'>串口</font>发送中断
外部中断、定时中断、串口中断C51程序
/******************************** 文件所用资源 1.外部中断0、1 定时中断0、1 串口中断 2.端口:P3.0,P3.1,P3.3,P3.4,P3.5 ********************************/ sfr ISP_CONTR = 0xe7; /*************************** 外部中断0服务子程序 ****************************/ /*void Int0() interrupt 0 { }*/ /*************************** 定时中断0服务子程序 **********************
[单片机]
STM32f103的数电采集电路的TIMER定时器的使用与时序控制的程序
STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 通用定时器设置的一般步骤可以总结为如下几个步骤: 1.定时器时钟使能 2.设置定时参数 3.定时器工作方式初始化 4.定时器中断方式使能 5.开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤) 6.使能定时器 7.编写中断处理函数 前端采
[单片机]
基于STM32F103的wifi数据透传
ESP8266串口型WIFI,主要用于传开关量、温度等 连线: VCC ----3.3V RST ----PE6 低电平复位 CH_PD ----PG7 使能脚,高电平正常工作 UTXD ----USART2 RX URXD ----USART2 TX GND ----GND 此次试验选STA模式的TCP Client透传,让WIFI模块连接路由器,然后在网络调试助手上设置好连接的IP地址和端口 STA模式,8266为客户端,PC是服务端 USART2发送的数据经过8266传输到网络调试助手上显示 8266默认波特率115200,8N1 所以USART2配置一样 修改WiFi名称、密码和IP 在下载程序前,
[单片机]
基于<font color='red'>STM32F103</font>的wifi数据透传
TMS320C32扩展异步串口的方法
摘要:介绍了TMS320C32 DSP实现异步串行通信接口的三种方法:软件模拟实现、硬件实现、专用协议芯片实现。给出了具体实现的硬件接口和软件编程。在接口的第二种和第三种实现方法中,都使用了FPGA实现逻辑接口。 关键词:数字信号处理 异步串行接口 现场可编程逻辑阵列 电气传动控制 高速数字信号处理器(DSP)在现代工业控制中,特别是电气传动控制中的应用非常广泛。大量文献介绍的应用于电气传动控制的DSP使用的是TI公司的,TMS320系列DSP芯片,这其中又以TMX210C3X和TMS320F24X为主流应用产品。TMS320C32(以下简称为C32)是TMS320C3X系列产品中应用比较多的一种。主工业控制中,常常需要使用
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved