STM32F407 USARTDMA共思路DMA通道进行数据转发_第1页
STM32F407 USARTDMA共思路DMA通道进行数据转发_第2页
STM32F407 USARTDMA共思路DMA通道进行数据转发_第3页
STM32F407 USARTDMA共思路DMA通道进行数据转发_第4页
STM32F407 USARTDMA共思路DMA通道进行数据转发_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——STM32F407USARTDMA共思路DMA通道,进行数据转发/**

*******************************************************************************@fileIO_Toggle/main.c

*@authorMCDApplicationTeam*@versionV1.0.0

*@date19-September-2023*@briefMainprogrambody

*******************************************************************************@attention*

*THEPRESENTFIRMWAREWHICHISFORGUIDANCEONLYAIMSATPROVIDINGCUSTOMERS

*WITHCODINGINFORMATIONREGARDINGTHEIRPRODUCTSINORDERFORTHEMTOSAVE

*TIME.ASARESULT,STMICROELECTRONICSSHALLNOTBEHELDLIABLEFORANY

*DIRECT,INDIRECTORCONSEQUENTIALDAMAGESWITHRESPECTTOANYCLAIMSARISING

*FROMTHECONTENTOFSUCHFIRMWAREAND/ORTHEUSEMADEBYCUSTOMERSOFTHE

*CODINGINFORMATIONCONTAINEDHEREININCONNECTIONWITHTHEIRPRODUCTS.*

*COPYRIGHT2023STMicroelectronics

*******************************************************************************/

/*Includes*/#include\

//串口1连接电脑的USB-TTL小板子,串口2连接MAX485/*Privatetypedef*/#defineTX_MODE0#defineRX_MODE1

unsignedlongboundrate[7]={600,2400,4800,9600,19200,38400,57600};/*Privatevariables*/__IOunsignedcharuart_rx_tx_buf[2];

USART_InitTypeDefUSART_InitStruct;DMA_InitTypeDefDMA_InitStruct;GPIO_InitTypeDefGPIO_InitStruct;NVIC_InitTypeDefNVIC_InitStructure;

/*Privatefunctionprototypes*/

/*Privatefunctions*//**

*@briefMainprogram*@paramNone*@retvalNone*/voiduart_1_dma_init(void);voiduart_2_dma_init(void);voidSet485Mode(unsignedcharflag);voidSet_1_rate(unsignedcharrate_num);voidSet_2_rate(unsignedcharrate_num);void_485PinConfig(void);intmain(void){uart_1_dma_init();uart_2_dma_init();Set485Mode(TX_MODE);while(1);}

voiduart_1_dma_init(void){

/*Enableuart1,DMA2andGPIOclocks****************************************/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2|RCC_AHB1Periph_GPIOB,ENABLE);//B6-TX,B7-RX;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);/***********************uart1initial****************************************/USART_InitStruct.USART_BaudRate=9600;USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_InitStruct.USART_Parity=USART_Parity_No;USART_InitStruct.USART_StopBits=USART_StopBits_1;USART_InitStruct.USART_WordLength=USART_WordLength_8b;USART_Init(USART1,/***************GPIO**************************************************/GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,

/*DMA2Stream0channel0configuration**************************************/DMA_InitStruct.DMA_Channel=DMA_Channel_4;

DMA_InitStruct.DMA_PeripheralBaseAddr=(uint32_t)(

DMA_InitStruct.DMA_Memory0BaseAddr=(uint32_t)uart_rx_tx_buf;DMA_InitStruct.DMA_DIR=DMA_DIR_PeripheralToMemory;DMA_InitStruct.DMA_BufferSize=2;

DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;

DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;DMA_InitStruct.DMA_Priority=DMA_Priority_High;

DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;

DMA_InitStruct.DMA_FIFOThreshold=DMA_FIFOThreshold_HalfFull;DMA_InitStruct.DMA_MemoryBurst=DMA_MemoryBurst_Single;DMA_InitStruct.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;DMA_Init(DMA2_Stream2,DMA_InitStruct.DMA_Channel=DMA_Channel_4;

DMA_InitStruct.DMA_PeripheralBaseAddr=(uint32_t)(DMA_InitStruct.DMA_Memory0BaseAddr=(uint32_t)uart_rx_tx_buf;DMA_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;DMA_InitStruct.DMA_BufferSize=2;

DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;

DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;DMA_InitStruct.DMA_Priority=DMA_Priority_High;

DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;DMA_InitStruct.DMA_FIFOThreshold=DMA_FIFOThreshold_HalfFull;DMA_InitStruct.DMA_MemoryBurst=DMA_MemoryBurst_Single;DMA_InitStruct.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;DMA_Init(DMA2_Stream7,/**********************DMAinterrupt************************/DMA_ITConfig(DMA2_Stream7,DMA_IT_TC,ENABLE);DMA_ITConfig(DMA2_Stream2,DMA_IT_TC,ENABLE);NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream7_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;NVIC_Init(NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;NVIC_Init(/**********************start*********************************/

DMA_Cmd(DMA2_Stream7,DISABLE);//不使能DMA对于USART1的发送功能DMA_Cmd(DMA2_Stream2,ENABLE);//使能DMA对于USART1的接收功能USART_DMACmd(USART1,USART_DMAReq_Rx|USART_DMAReq_Tx,ENABLE);USART_Cmd(USART1,ENABLE);}

voiduart_2_dma_init(void){

/*Enableuart1,DMA2andGPIOclocks****************************************/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1|RCC_AHB1Periph_GPIOA,ENABLE);//A2-TX,A3-RXRCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);/***********************uart1initial****************************************/USART_InitStruct.USART_BaudRate=9600;USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_InitStruct.USART_Parity=USART_Parity_No;USART_InitStruct.USART_StopBits=USART_StopBits_1;USART_InitStruct.USART_WordLength=USART_WordLength_8b;USART_Init(USART2,/***************GPIO**************************************************/GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);

/*DMA2Stream0channel0configuration**************************************/DMA_InitStruct.DMA_Channel=DMA_Channel_4;

DMA_InitStruct.DMA_PeripheralBaseAddr=(uint32_t)(DMA_InitStruct.DMA_Memory0BaseAddr=(uint32_t)uart_rx_tx_buf;DMA_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;DMA_InitStruct.DMA_BufferSize=2;

DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;

DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;

DMA_InitStruct.DMA_Priority=DMA_Priority_High;

DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;DMA_InitStruct.DMA_FIFOThreshold=DMA_FIFOThreshold_HalfFull;DMA_InitStruct.DMA_MemoryBurst=DMA_MemoryBurst_Single;DMA_InitStruct.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;DMA_Init(DMA1_Stream6,DMA_InitStruct.DMA_Channel=DMA_Channel_4;

DMA_InitStruct.DMA_PeripheralBaseAddr=(uint32_t)(DMA_InitStruct.DMA_Memory0BaseAddr=(uint32_t)uart_rx_tx_buf;DMA_InitStruct.DMA_DIR=DMA_DIR_PeripheralToMemory;DMA_InitStruct.DMA_BufferSize=2;

DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;

DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;DMA_InitStruct.DMA_Priority=DMA_Priority_High;

DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;DMA_InitStruct.DMA_FIFOThreshold=DMA_FIFOThreshold_HalfFull;DMA_InitStruct.DMA_MemoryBurst=DMA_MemoryBurst_Single;DMA_InitStruct.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;DMA_Init(DMA1_Stream5,/**********************DMAinterrupt************************/DMA_ITConfig(DMA1_Stream5,DMA_IT_TC,ENABLE);DMA_ITConfig(DMA1_Stream6,DMA_IT_TC,ENABLE);NVIC_InitStructure.NVIC_IRQChannel=DMA1_Stream5_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x00;NVIC_Init(NVIC_InitStructure.NVIC_IRQChannel=DMA1_Stream6_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;NVIC_Init(/**********************start*********************************/

DMA_Cmd(DMA1_Stream5,ENABLE);//使能USART2的串口接收DMADMA_Cmd(DMA1_Stream6,DISABLE);//不使能USART2的串口发送DMA

USART_DMACmd(USART2,USART_DMAReq_Rx|USART_DMAReq_Tx,ENABLE);USART_Cmd(USART2,ENABLE);}

voidDMA2_Stream2_IRQHandler(void)//串口1接收到了数据。即:电脑发数据了{if(DMA_GetITStatus(DMA2_Stream2,DMA_IT_TCIF2)==SET){DMA_ClearFlag(DMA2_Stream2,DMA_FLAG_TCIF2);if(uart_rx_tx_buf[0]=='C'){Set_1_rate(uart_rx_tx_buf[1]);}DMA_Cmd(DMA1_Stream6,ENABLE);//使能USART2的串口发送DMA}}

voidDMA2_Stream7_IRQHandler(void){if(DMA_GetITStatus(DMA2_Stream7,DMA_IT_TCIF7)==SET)//串口1发送完数据{DMA_ClearFlag(DMA2_Stream7,DMA_FLAG_TCIF7);DMA_Cmd(DMA2_Stream7,DISABLE);//不使能DMA对于USART1的发送功能}}

voidDMA1_Stream5_IRQHandler(void)//串口2接收数据完成,即:8051向串口2发送数据{if(DMA_GetITStatus(DMA1_Stream5,DMA_IT_TCIF5)==SET){DMA_ClearFlag(DMA1_Stream5,DMA_FLAG_TCIF5);DMA_Cmd(DMA2_Stream7,ENABLE);//使能DMA对于USART1的发送功能}}

voidDMA1_Stream6_IRQHandler(void)//串口2发送数据完成,即:发送到8051{if(DMA_GetITStatus(DMA1_Stream6,DMA_IT_TCIF6)==SET){DMA_ClearFlag(DMA1_Stream6,DMA_FLAG_TCIF6);if(uart_rx_tx_buf[0]=='C'){Set_2_rate(uart_rx_tx_buf[1]);

}elseif(uart_rx_tx_buf[0]=='R'}DMA_Cmd(DMA1_Stream6,DISABLE);//关闭USART2的串口发送DMA}}

voidSet_1_rate(unsignedcharrate_num){USART_InitStruct.USART_BaudRate=boundrate[rate_num];USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_InitStruct.USART_Parity=USART_Parity_No;USART_InitStruct.USART_StopBits=USART_StopBits_1;USART_InitStruct.USART_WordLength=USART_WordLength_8b;USART_Init(USART1,}

voidSet_2_rate(unsignedcharrate_num){USART_InitStruct.USART_BaudRate=boundrate[rate_num];USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论