STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx

上传人:b****6 文档编号:22184151 上传时间:2023-02-02 格式:DOCX 页数:29 大小:37.37KB
下载 相关 举报
STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx_第1页
第1页 / 共29页
STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx_第2页
第2页 / 共29页
STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx_第3页
第3页 / 共29页
STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx_第4页
第4页 / 共29页
STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx

《STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx》由会员分享,可在线阅读,更多相关《STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx(29页珍藏版)》请在冰豆网上搜索。

STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx

GPIO」nitStructure.GPIO_Pin=GPIO_Pin_9;

//PA.9

GPIO」nitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO」nitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

//复用推挽输岀

GPIO」nit(GPIOA,&

GPIO_InitStructure);

//初始化PA9

//USART1_RXPA.10

GPIO」nitStructure.GPIO_Pin=GPIO_Pin_10;

GPIO」nitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

//初始化PA10

浮空输入

//Usart1NVIC配置

NVIC_InitStructure.NVIC_IRQChannel=USART1」RQn;

NVIC」nitStructure.NVIC」RQChannelPreemptionPriority=1

3

;

//抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

//

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

//IRQ

子优先级3

通道使能

NVIC_Init(&

NVIC_InitStructure);

//根据指定的参数初始化VIC寄存器

/*EnableDMAChannel4Interrupt*/

NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel4_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;

NVIC_Init(&

NVIC_InitStructure);

/*EnableDMAChannel5Interrupt*/

NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel5_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;

//USART参数初始化设置

USART_InitStructure.USART_BaudRate=bound;

//

USART_InitStructure.USART_WordLength=USART_WordLength_8b;

8位数据格式

一般设置为

9600;

字长为

USART_InitStructure.USART_StopBits=USART_StopBits_1;

USART_InitStructure.USART_Parity=USART_Parity_No;

USARTInitStructure.USARTHardwareFlowControl=

一个停止位

无奇偶校验位

USART_HardwareFlowControl_None;

〃无硬件数据流控制

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

收发模式

USART_Init(USART1,&

USART_InitStructure);

//USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);

USART_Cmd(USART1,ENABLE);

}

初始化串口

开启中断

开启空闲中断

使能串口

//串口2初始化函数

voiduart2_init(u32bound)

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

使能GPIOA时钟

使能USART2时

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPI0_Pin_2;

//PA2

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

//复用推挽

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&

GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;

//PA3

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

//浮空输入

RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);

〃复位串口2

RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);

〃停止复位

USART_InitStructure.USART_BaudRate=bound;

//8

长度

位数据

/〃

奇偶校验位

//模式

无硬件数据流控制

收发

USART_Init(USART2,&

;

NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority

2级

//根据NVIC_InitStruct

外设NVIC寄存器

//////////////////////EnableDMAChannel7Interrupt

//////////////////////////////

使能串口2中断

=1;

//先占优先级

从优先级2级

使能外部中断通道

中指定的参数初始化

NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel7_IRQn;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;

NVIC_Init(&

/*EnableDMAChannel6Interrupt*/

NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel6_IRQn;

//USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

//开启中断

USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);

//开启空闲中断

USART_Cmd(USART2,ENABLE);

//使能串口

//串口3初始化函数

voiduart3_init(u32bound)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

//使能GPIOB时

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

//使能USART3时

USART_DeInit(USART3);

//USART1TXPB.10

复位串口3

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

//PB.10

GPIO_Init(GPIOB,&

复用推挽输岀

初始化PB.11

//USART1RXPB.11

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;

初始化PB

//USART初始化设置

〃#ifdefEN_USART3_RX//如果使能了接收

//—般设置为9600;

USART_InitStructure.USART_WordLength=USART_WordLength_8b;

〃字长为8

位数据格式

USART_InitStructure.USART_HardwareFlowControl=

//发模式

USART_Init(USART3,&

//初始化串口

NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

抢占优先级3

//////////////////////*EnableDMAChannel2Interrupt*/

/////////////////

NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel2_IRQn;

/*EnableDMAChannel3Interrupt*/

NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel3_IRQn;

//USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);

USART_ITConfig(USART3,USART_IT_IDLE,ENABLE);

USART_Cmd(USART3,ENABLE);

//串口4初始化函数

voiduart4_init(u32bound)

GPIO_InitTypeDefGPIO_InitStructure;

USART_InitTypeDefUSART_InitStructure;

NVIC」nitTypeDefNVIC_InitStructure;

DMA_InitTypeDefDMA_InitStructure;

//定义DMA初始化结构体

DMA_InitStructure

//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_O);

//选择NVIC优先级分

组0

RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

//打开串口外设的时钟

//串口4所使用管脚输岀输入定义

//定义UART4Tx(PC.10)脚为复用推挽输岀

口的第2脚

口速度

口复用推挽输岀

初始化串口1输岀IO口

口的第3脚

口悬空输入

初始化串口1输入IO

//IO

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&

//定义UART4Rx(PC.11)为悬空输入

//IO

//串口4参数初始化定义部分,串口1参数为9600,8,1,N接收中断方式

//设定传输速

//设定传输

数据位数

//设定停止

位个数

USART_InitStructure.USART_Parity=USART_Parity_No;

//不用校验位

〃不用流量控制

//使用接收和发送功能

USART_Init(UART4,&

初始化串口4

USART_ITConfig(UART4,USART_IT_IDLE,ENABLE);

USART_Cmd(UART4,ENABLE);

USART_ClearFlag(UART4,USART_FLAG_TC);

使能串口4接收中断

使能串口4清标志(后增加)

DMA_Delnit(DMA2_Channel3);

//重置DMA2通道配置

DMA」nitStructure.DMA_PeripheralBaseAddr=0x40004C04;

//外设地址

DMA_InitStructure.DMA_MemoryBaseAddr=(u32)USART4_RECEIVE_DATA;

内存地址

DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;

//外设作为数据目的地

DMA_InitStructure.DMA_BufferSize=512;

//DMA缓存大小:

BufferSize

DMA_InitStructure.DMA_Peripherallnc=DMA_PeripheralInc_Disable;

外设地址寄存器不递增

DMA_InitStructure.DMA_Memorylnc=DMA_MemoryInc_Enable;

//内存地址

寄存器递增

DMA_InitStructure.DMA_PeripheralDataSize=

DMA_PeripheralDataSize_Byte;

//外设数据宽度为8位

DMA_InitStructure.DMA_MemoryDataSize=DMA_PeripheralDataSize_Byte;

//内存数据宽度为8位

DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;

//工作在正常缓存模式

DMA_InitStructure.DMA_Priority=DMA_Priority_VeryHigh;

//设置DMA通道

优先级为高

DMA_InitSt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1