ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:21.28KB ,
资源ID:2642924      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2642924.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32F103多个串口配置DMA程序纯代码版详解.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、STM32F103多个串口配置DMA程序纯代码版详解软件:KeilMDK芯片:STM32F103/STM32F107串口数量:4备注:4个串口均配置为DMA读取/串口1初始化函数void uart1_init(u32 bound) /GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_G

2、PIOA, ENABLE); /使能USART1,GPIOA时钟 USART_DeInit(USART1); /复位串口1 /USART1_TX PA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化PA9 /USART1_RX PA.10 GPIO

3、_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化PA10 /Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;/抢占优先级3 NVIC_InitStructure.NVIC_

4、IRQChannelSubPriority = 0; /子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ通道使能 NVIC_Init(&NVIC_InitStructure); /根据指定的参数初始化VIC寄存器 /*Enable DMA Channel4 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_Init

5、Structure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /*Enable DMA Channel5 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQC

6、hannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /USART 参数初始化设置 USART_InitStructure.USART_BaudRate = bound;/一般设置为9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;/一个

7、停止位 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(USART1, &USART_InitStructure); /初始化串口 / USART_ITConfig(USART1, USAR

8、T_IT_RXNE, ENABLE);/开启中断 USART_ITConfig(USART1, USART_IT_IDLE , ENABLE); /开启空闲中断 USART_Cmd(USART1, ENABLE); /使能串口 /串口2初始化函数void uart2_init(u32 bound) GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph

9、_GPIOA, ENABLE);/使能GPIOA时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);/使能USART2时钟 GPIO_InitStructure.GPIO_Pin = GPIO_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

10、.GPIO_Pin = GPIO_Pin_3;/PA3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);/复位串口2 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);/停止复位 USART_InitStructure.USART_BaudRate = bound;/一般设置为9600

11、; USART_InitStructure.USART_WordLength = USART_WordLength_8b;/8位数据长度 USART_InitStructure.USART_StopBits = USART_StopBits_1;/一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;/奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/无硬件数据流控制 USART_InitStructure.USA

12、RT_Mode = USART_Mode_Rx | USART_Mode_Tx;/收发模式 USART_Init(USART2, &USART_InitStructure); ; /初始化串口 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; /使能串口2中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; /先占优先级2级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /从优先级2级 NVIC_InitStructure

13、.NVIC_IRQChannelCmd = ENABLE; /使能外部中断通道 NVIC_Init(&NVIC_InitStructure); /根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 /Enable DMA Channel7 Interrupt / NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriori

14、ty = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /*Enable DMA Channel6 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitSt

15、ructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); / USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);/开启中断 USART_ITConfig(USART2, USART_IT_IDLE , ENABLE); /开启空闲中断 USART_Cmd(USART2, ENABLE); /使能串口 /串口3初始化函数void uart3_init(u32 bound) /GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART

16、_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /使能GPIOB时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); /使能USART3时钟 USART_DeInit(USART3); /复位串口3 /USART1_TX PB.10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /PB.10 GP

17、IO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出 GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化PB.11 /USART1_RX PB.11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入 GPIO_InitStructure.GPIO_Spee

18、d = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化PB /USART 初始化设置 /#ifdef EN_USART3_RX /如果使能了接收 USART_InitStructure.USART_BaudRate = bound;/一般设置为9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;/一个停止位 USA

19、RT_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); /初始化串口 /Usart1 NVIC 配置 NVIC_InitStructure.N

20、VIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;/抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ通道使能 NVIC_Init(&NVIC_InitStructure); /根据指定的参数初始化VIC寄存器 / /*Enable DMA Channel2 Interrupt */ / NVI

21、C_InitStructure.NVIC_IRQChannel = DMA1_Channel2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /*Enable DMA Channel3 Interrupt */ NVIC_InitStructure.NVI

22、C_IRQChannel = DMA1_Channel3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); / USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);/开启中断 USART_ITConfig(USART3,

23、 USART_IT_IDLE , ENABLE); /开启空闲中断 USART_Cmd(USART3, ENABLE); /使能串口 /串口4初始化函数void uart4_init(u32 bound) GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; DMA_InitTypeDef DMA_InitStructure; /定义DMA初始化结构体DMA_InitStructure / NVIC_PriorityGrou

24、pConfig(NVIC_PriorityGroup_0); /选择NVIC优先级分组0 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); / 打开串口外设的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); /串口4所使用管脚输出输入定义 /定义UART4 Tx (PC

25、.10)脚为复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /IO口的第2脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /IO口速度 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /IO口复用推挽输出 GPIO_Init(GPIOC, &GPIO_InitStructure); /初始化串口1输出IO口 /定义 UART4 Rx (PC.11)为悬空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11

26、; /IO口的第3脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/IO口悬空输入 GPIO_Init(GPIOC, &GPIO_InitStructure); /初始化串口1输入IO口 /串口4参数初始化定义部分,串口1参数为9600 , 8 ,1 ,N 接收中断方式 USART_InitStructure.USART_BaudRate = bound; /设定传输速率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; /设定传输数据位数 USART_InitS

27、tructure.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(UART4, &USART_

28、InitStructure); /初始化串口4 USART_ITConfig(UART4, USART_IT_IDLE,ENABLE); /使能串口4接收中断 USART_Cmd(UART4, ENABLE); /使能串口4 USART_ClearFlag(UART4, USART_FLAG_TC); / 清标志(后增加) DMA_DeInit(DMA2_Channel3); /重置DMA 2通道配置 DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40004C04; /外设地址 DMA_InitStructure.DMA_MemoryBaseAddr

29、 = (u32)USART4_RECEIVE_DATA; /内存地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /外设作为数据目的地 DMA_InitStructure.DMA_BufferSize = 512; /DMA缓存大小:BufferSize DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /外设地址寄存器不递增 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /内存地址寄存器递增

30、 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_InitStructure.DMA_M2M = DMA_M2M_Disable; /禁止DMA通道设置为内存至内存传输 DMA_Init(DMA2_Channel3, &DMA_InitStructure); /

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2