收藏 分享(赏)

STM32串口4接收DMA.docx

上传人:HR专家 文档编号:6043058 上传时间:2019-03-25 格式:DOCX 页数:6 大小:14.36KB
下载 相关 举报
STM32串口4接收DMA.docx_第1页
第1页 / 共6页
STM32串口4接收DMA.docx_第2页
第2页 / 共6页
STM32串口4接收DMA.docx_第3页
第3页 / 共6页
STM32串口4接收DMA.docx_第4页
第4页 / 共6页
STM32串口4接收DMA.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、STM32 串口 4 接收 DMA+闲时中断void uart4_init(u32 bound)GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /使能 UART4,GPIOA 时钟/UART4_TX GPIOC.1

2、0GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /PC.10GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出GPIO_Init(GPIOC, /初始化 GPIOC.10/UART4_RX GPIOC.11 初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;/PC11GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLO

3、ATING;/浮空输入GPIO_Init(GPIOC, /初始化 GPIOC11 /Uart4 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;/抢占优先级 3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /子优先级 3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/IRQ 通道使能NVIC_Init( /根据指定的参数

4、初始化 VIC寄存器/USART 初始化设置USART_InitStructure.USART_BaudRate = bound;/串口波特率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_HardwareFlowCo

5、ntrol = USART_HardwareFlowControl_None;/无硬件数据流控制USART_InitStructure.USART_Mode =USART_Mode_Tx| USART_Mode_Rx; /收发模式USART_Init(UART4, /初始化串口 4USART_ITConfig(UART4, USART_IT_IDLE, ENABLE);USART_DMACmd(UART4,USART_DMAReq_Rx,ENABLE);USART_Cmd(UART4, ENABLE); /使能串口 4void MYDMA_Config(DMA_Channel_TypeDef*

6、 DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);/使能 DMA 传输DMA_DeInit(DMA_CHx); /将 DMA 的通道 1 寄存器重设为缺省值DMA1_MEM_LEN=cndtr;DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; /DMA 外设基地址DMA_InitStructure.DMA_MemoryBaseAddr =cmar; /DMA 内存基地址DMA_InitStructure.DMA_DIR =

7、DMA_DIR_PeripheralSRC; /外设作为数据源,从外设发到片内DMA_InitStructure.DMA_BufferSize = cndtr; /DMA 通道的DMA 缓存的大小DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /外设地址寄存器不变DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /内存地址寄存器递增DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralData

8、Size_Byte; /外设数据宽度为 8 位DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; /数据宽度为 8 位DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; /工作在正常缓存模式DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; /DMA 通道 x 拥有中优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; /DMA 通道 x 没有设置为内存到内存传输DMA_Init(

9、DMA_CHx, /根据DMA_InitStruct 中指定的参数初始化 DMA 的通道USART1_Tx_DMA_Channel 所标识的寄存器DMA_Cmd(DMA_CHx, DISABLE); /关闭 UART4 TX DMA1 所指示的通道 DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);/DMA通道的 DMA 缓存的大小DMA_Cmd(DMA_CHx, ENABLE); /使能 UART4 TX DMA2 所指示的通道 void UART4_IRQHandler(void) /串口 4 中断服务程序unsigned char num=0;if

10、(USART_GetITStatus(UART4,USART_IT_IDLE) = SET)num = UART4-SR;/先读 SR,再读 DR 才能清楚标志位num = UART4-DR; /SR、DR 赋值清标志位,清USART_IT_IDLE 标志DMA_Cmd(DMA2_Channel3, DISABLE); /关闭 DMAnum = DMA_GetCurrDataCounter(DMA2_Channel3); /得到真正接收数据个数 DMA2_Channel3-CNDTR=20; /重新设置接收数据个数 DMA_Cmd(DMA2_Channel3,ENABLE); /开启 DMAvoid main(void)MYDMA_Config(DMA2_Channel3,(u32)/初始化串口 4DMA

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报