STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx
- 文档编号:22184151
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:29
- 大小:37.37KB
STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx
《STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx》由会员分享,可在线阅读,更多相关《STM32F103多个串口配置DMA程序纯代码版详解Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32F103 串口 配置 DMA 程序 代码 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)