日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送

發(fā)布時間:2025/5/22 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 void USART3_Configuration(void) //串口3配置---S 2 { 3 DMA_InitTypeDef DMA_InitStructure; 4 USART_InitTypeDef USART_InitStructure; 5 GPIO_InitTypeDef GPIO_InitStructure; 6 NVIC_InitTypeDef NVIC_InitStructure; 7 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); 8 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_DMA2, ENABLE); 9 //USART1 10 //TX 11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 13 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 14 GPIO_Init(GPIOB, &GPIO_InitStructure); 15 //RX 16 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; 17 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 18 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 19 GPIO_Init(GPIOB, &GPIO_InitStructure); 20 21 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&( USART3->DR); 22 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)_code_rece; 23 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; 24 DMA_InitStructure.DMA_BufferSize = 4000; 25 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; 26 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; 27 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //HalfWord 28 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; 29 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ; // DMA_Mode_Normal 30 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA_Priority_Low DMA_Priority_Medium DMA_Priority_High 31 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; 32 DMA_Init(DMA1_Channel3, &DMA_InitStructure); 33 34 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&( USART3->DR); 35 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)_send_data; 36 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; 37 DMA_InitStructure.DMA_BufferSize = 14; 38 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; 39 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; 40 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //HalfWord 41 DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte; 42 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ; // DMA_Mode_Normal 43 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA_Priority_Low DMA_Priority_Medium DMA_Priority_High 44 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; 45 DMA_Init(DMA1_Channel2, &DMA_InitStructure); 46 47 USART_OverSampling8Cmd(USART3, ENABLE); 48 USART_InitStructure.USART_BaudRate = 460800; 49 USART_InitStructure.USART_WordLength = USART_WordLength_8b; 50 USART_InitStructure.USART_StopBits = USART_StopBits_1; 51 USART_InitStructure.USART_Parity = USART_Parity_No; 52 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 53 USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; 54 USART_Init(USART3, &USART_InitStructure); 55 56 //NVIC 設(shè)置,使能中斷 57 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //選擇中斷分組1 58 59 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //選擇串口3中斷 60 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占式中斷優(yōu)先級設(shè)置為1 61 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應(yīng)式中斷優(yōu)先級設(shè)置為1 62 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷 63 NVIC_Init(&NVIC_InitStructure); 64 USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);//開啟中斷 65 66 USART_DMACmd(USART3,USART_DMAReq_Rx,ENABLE); 67 USART_DMACmd(USART3,USART_DMAReq_Tx,ENABLE); 68 DMA_Cmd(DMA1_Channel3, ENABLE); 69 USART_Cmd(USART3, ENABLE); 70 USART3->SR; 71 USART3->DR; 72 } 73 74 DmaSendDataProc( DMA1_Channel2, 14 ); 75 //開啟一次DMA傳輸 76 void DmaSendDataProc(DMA_Channel_TypeDef *DMA_Streamx,u16 ndtr) 77 { 78 79 DMA_Cmd(DMA_Streamx, DISABLE); //關(guān)閉DMA傳輸 80 81 DMA_SetCurrDataCounter(DMA_Streamx,ndtr); //數(shù)據(jù)傳輸量 82 83 DMA_Cmd(DMA_Streamx, ENABLE); //開啟DMA傳輸 84 85 } 86 void USART3_IRQHandler(void) //客戶端傳來數(shù)據(jù) 87 { 88 if(USART_GetFlagStatus(USART3, USART_FLAG_IDLE)==SET) //RXNE一個字節(jié)接收完成標(biāo)志位, 89 { 90 DMA_Cmd(DMA1_Channel3, DISABLE); //關(guān)閉DMA輸出 91 92 usart2_num = 2000 - DMA1_Channel3 ->CNDTR; //獲取讀到的字節(jié)數(shù) 93 //處理數(shù)據(jù) 94 DMA1_Channel3->CNDTR = 2000; //重新填充 95 DMA_Cmd(DMA1_Channel3, ENABLE); //開啟DMA傳輸 96 } 97 98 USART_ClearITPendingBit(USART3, USART_IT_IDLE); //清除接收中斷標(biāo)志位 99 USART3->SR; 100 USART3->DR; 101 102 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/penuel/p/11264220.html

總結(jié)

以上是生活随笔為你收集整理的STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。