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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

stm32 DMA 配置 串口程序

發(fā)布時(shí)間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32 DMA 配置 串口程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
STM32的串口1發(fā)送、接收DMA模式函數(shù)配置,已經(jīng)調(diào)試可用,大家可以交流學(xué)習(xí)下

/**********************************************************************************
**函數(shù)名稱:void USART1_Config(void)
**函數(shù)功能:USART1串口引腳初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:內(nèi)部調(diào)用
**********************************************************************************/
static void USART1_Config(void)
{
? ?GPIO_InitTypeDef GPIO_InitStructure;
? ?USART_InitTypeDef USART_InitStructure;


? ?RCC_APB2PeriphClockCmd(USART1_RCC | RCC_APB2Periph_USART1, ENABLE);? ? ? ? //打開串口時(shí)鐘
? ?
? ?
? ?/* USART1 GPIO config */
? ?/* Configure USART1 Tx (PA.9) as alternate function push-pull */
? ?GPIO_InitStructure.GPIO_Pin? ?= USART1_TX;
? ?GPIO_InitStructure.GPIO_Mode??= GPIO_Mode_AF_PP;
? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ?GPIO_Init(USART1_PORT, &GPIO_InitStructure);?
? ?
? ?/* Configure USART1 Rx (PA.10) as input floating */
? ?GPIO_InitStructure.GPIO_Pin??= USART1_RX;
? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
? ?GPIO_Init(USART1_PORT, &GPIO_InitStructure);
? ?
? ?/* USART1 mode config */
? ?USART_InitStructure.USART_BaudRate? ?= BOOTRATE;
? ?USART_InitStructure.USART_WordLength = USART_WordLength_8b;
? ?USART_InitStructure.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(USART1, &USART_InitStructure);?

? ?//USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);? ?//使能串口1中斷

? ?USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);??? ? ? ?? ?//使能USART1發(fā)送DMA請(qǐng)求?
? ?USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);? ? ? ?? ?//使能USART1接收DMA請(qǐng)求
? ?? ??
? ?USART_Cmd(USART1, ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//啟動(dòng)串口?

}


/**********************************************************************************
**函數(shù)名稱:void USART1_NVIC_Configuration(void)
**函數(shù)功能:USART1串口中斷初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:內(nèi)部調(diào)用
**********************************************************************************/
static void USART1_NVIC_Configuration(void)
{
? ? NVIC_InitTypeDef NVIC_InitStructure;

? ? //設(shè)置NVIC優(yōu)先級(jí)分組為Group2:0-3搶占式優(yōu)先級(jí),0-3的響應(yīng)式優(yōu)先級(jí)
? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
? ?? ???
? ? NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;? ? ? ? ? ? ? ?? ?? ?? ?? ?? ?? ?? ???//串口接收中斷打開
? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = USART1_IRQn_Priority;??//設(shè)置中斷優(yōu)先級(jí)
? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
? ? NVIC_Init(&NVIC_InitStructure);

}


/**********************************************************************************
**函數(shù)名稱:void USART1_Init(void)
**函數(shù)功能:USART1串口初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:內(nèi)部調(diào)用
**********************************************************************************/
static void USART1_Init(void)
{
? ? USART1_Config();? ? ? ?? ?? ?? ?? ? //USART1引腳功能初始化

? ? ? ? USART1_NVIC_Configuration();? ? ? ? //USART1中斷初始化
}

/**********************************************************************************
**函數(shù)名稱:static void DMA1_USART1_TX_Configuration(void)
**函數(shù)功能:DMA1_USART1_TX初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:外部調(diào)用
**********************************************************************************/
static void DMA1_USART1_TX_Configuration(void)
{
? ? DMA_InitTypeDef DMA_InitStructure;

? ? ? ? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);? ? ? ?? ???//開啟DMA時(shí)鐘?

? ? ? ? /*
? ? ? ???*??DMA設(shè)置:
? ???*??設(shè)置DMA源:內(nèi)存地址&串口數(shù)據(jù)寄存器地址
? ???*??方向:內(nèi)存-->外設(shè)
? ???*??每次傳輸位:8bit
? ???*??傳輸大小DMA_BufferSize=SENDBUFF_SIZE
? ???*??地址自增模式:外設(shè)地址不增,內(nèi)存地址自增1
? ???*??DMA模式:一次傳輸,非循環(huán)
? ???*??優(yōu)先級(jí):高
? ? ? ???*/? ??
? ? DMA_DeInit(DMA1_Channel4);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//串口1的DMA傳輸通道是通道4
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??
? ? DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR);? ???//設(shè)置DMA源
? ? DMA_InitStructure.DMA_MemoryBaseAddr = (u32)USART1_SendBuff;? ? ? ?? ? //DMA內(nèi)存基地址
? ? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;? ?? ?? ?? ?? ???//外設(shè)作為DMA的目的端
? ? DMA_InitStructure.DMA_BufferSize = USART1_SENDBUFF_SIZE;? ?? ?? ???//傳輸大小
? ? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;? ?//外設(shè)地址不增加
? ? DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;? ?? ?? ?? ?//內(nèi)存地址自增1
? ? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;? ? ? ? ? ? ? ? //外設(shè)數(shù)據(jù)寬度8bit
? ? DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //內(nèi)存數(shù)據(jù)寬度8bit
? ? DMA_InitStructure.DMA_Mode =??DMA_Mode_Circular;? ?? ?? ?? ?? ?? ? //DMA_Mode_Normal(只傳送一次), DMA_Mode_Circular (不停地傳送)
? ? DMA_InitStructure.DMA_Priority = DMA_Priority_High;? ?? ?? ?? ?? ? //(DMA傳送優(yōu)先級(jí)為高)
? ? DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? //非內(nèi)存到內(nèi)存
? ??
? ? ? ? DMA_Init(DMA1_Channel4, &DMA_InitStructure);? ? ? ?? ?? ?? ???

? ? ? ? DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE);? ?? ? //使能DMA通道4傳輸完成中斷



}


/**********************************************************************************
**函數(shù)名稱:static void DMA1_USART1_TX_NVIC_Configuration(void)
**函數(shù)功能:DMA中斷初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:外部調(diào)用
**********************************************************************************/
static void DMA1_USART1_TX_NVIC_Configuration(void)
{
? ?NVIC_InitTypeDef NVIC_InitStructure;
? ?
? ?NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;??
? ?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;??
? ?NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;??
? ?NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;??
? ?NVIC_Init(&NVIC_InitStructure);

}


/**********************************************************************************
**函數(shù)名稱:static void DMA1_USART1_TX_Init(void)
**函數(shù)功能:USART1串口初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:外部調(diào)用
**********************************************************************************/
static void DMA1_USART1_TX_Init(void)
{
? ?? ? ? ? DMA1_USART1_TX_Configuration();

? ? ? ? DMA1_USART1_TX_NVIC_Configuration();
}


/**********************************************************************************
**函數(shù)名稱:static void DMA1_USART1_RX_Configuration(void)
**函數(shù)功能:DMA1_RX初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:外部調(diào)用
**********************************************************************************/
static void DMA1_USART1_RX_Configuration(void)
{? ? ? ??
? ? ? ? DMA_InitTypeDef DMA_InitStructure;

? ? ? ? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

? ? ? ? DMA_DeInit(DMA1_Channel5);

? ? ? ? DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USART1->DR;? ?? ?? ???//DMA外設(shè)基地址
? ? ? ? DMA_InitStructure.DMA_MemoryBaseAddr = (u32)USART1_RecvBuff; ? ? ? ? ? ? ? ?? ? //DMA內(nèi)存基地址
? ? ? ? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ?? ? //外設(shè)作為數(shù)據(jù)傳輸?shù)膩碓?br style="word-wrap:break-word" /> ? ? ? ? DMA_InitStructure.DMA_BufferSize = USART1_RECVBUFF_SIZE; ? ? ? ? ? ? ? ? ? ? ? ?? ? //DMA緩存大小
? ? ? ? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; ? ? ? ?? ? //外設(shè)地址寄存器不變
? ? ? ? DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; ? ? ? ? ? ? ? ???? ? ? ?? ? //內(nèi)存地址寄存器遞增
? ? ? ? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外設(shè)數(shù)據(jù)寬度8bit?
? ? ? ? DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; ? ? ? ?? ? //內(nèi)存數(shù)據(jù)寬度8bit
? ? ? ? DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? //循環(huán)模式
? ? ? ? DMA_InitStructure.DMA_Priority = DMA_Priority_High; ? ? ? ? ? ? ? ? ? ? ? ?? ?? ???//優(yōu)先級(jí):高
? ? ? ? DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?? ???//非內(nèi)存到內(nèi)存

? ? ? ? DMA_Init(DMA1_Channel5, &DMA_InitStructure);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? //初始化DMA

? ? ? ? DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE); //使能DMA通道5傳輸完成中斷
? ? ? ? DMA_Cmd(DMA1_Channel5, ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //使能DMA通道5
? ? ? ??

}


/**************************************************************
** 函數(shù)名稱 :DMA1_USART1_RX_NVIC_Configuration(void)
** 功能說明 :NVIC初始化
** 輸入?yún)?shù) :無
** 輸出參數(shù) :無
** 返回參數(shù) :無
** 注? ? 意 :無
***************************************************************/
static void DMA1_USART1_RX_NVIC_Configuration(void)
{
? ? ? ? NVIC_InitTypeDef NVIC_InitStructure;

? ? ? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
? ? ? ? NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn;
? ? ? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
? ? ? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
? ? ? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

? ? ? ? NVIC_Init(&NVIC_InitStructure);? ? ? ??
}


/**********************************************************************************
**函數(shù)名稱:void DMA1_USART1_RX_Init(void)
**函數(shù)功能:USART1串口初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:外部調(diào)用
**********************************************************************************/
static void DMA1_USART1_RX_Init(void)
{
? ?? ? ? ? DMA1_USART1_RX_Configuration();

? ? ? ? DMA1_USART1_RX_NVIC_Configuration();
}


/**********************************************************************************
**函數(shù)名稱:static void DMA1_USART1_Init(void)
**函數(shù)功能:DMA1串口初始化
**輸入?yún)?shù):無
**返回參數(shù):無
**函數(shù)調(diào)用:外部調(diào)用
**********************************************************************************/
static void DMA1_USART1_Init(void)
{
? ?? ? ? ? DMA1_USART1_TX_Init();

? ? DMA1_USART1_RX_Init();
}


/**********************************************************************************
**函數(shù)名稱:void USART1_Send_Buf(u8 *buf , unsigned int len)
**函數(shù)功能:通過DMA發(fā)送串口數(shù)據(jù)
**輸入?yún)?shù):data -- 發(fā)送數(shù)據(jù)
**返回參數(shù):0--發(fā)送不成功
**? ?? ?? ? 1--發(fā)送成功
**函數(shù)調(diào)用:外部調(diào)用
**********************************************************************************/
void USART1_Send_Buf(u8 *buf , unsigned int len)
{
? ? ? ? DMA_InitTypeDef DMA_InitStructure;

? ? ? ? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);? ? ? ?? ???//開啟DMA時(shí)鐘?

? ? ? ? /*
? ? ? ???*??DMA設(shè)置:
? ???*??設(shè)置DMA源:內(nèi)存地址&串口數(shù)據(jù)寄存器地址
? ???*??方向:內(nèi)存-->外設(shè)
? ???*??每次傳輸位:8bit
? ???*??傳輸大小DMA_BufferSize=SENDBUFF_SIZE
? ???*??地址自增模式:外設(shè)地址不增,內(nèi)存地址自增1
? ???*??DMA模式:一次傳輸,非循環(huán)
? ???*??優(yōu)先級(jí):高
? ? ? ???*/? ??
? ? DMA_DeInit(DMA1_Channel4);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//串口1的DMA傳輸通道是通道4
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??
? ? DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR);? ???//設(shè)置DMA源
? ? DMA_InitStructure.DMA_MemoryBaseAddr = (u32)buf;? ? ? ? ? ? ? ? ? ? ? ?? ?? ???//DMA內(nèi)存基地址
? ? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;? ?? ?? ?? ?? ???//外設(shè)作為DMA的目的端
? ? DMA_InitStructure.DMA_BufferSize = len;? ?? ?? ?? ?? ?? ?? ?? ?? ? //傳輸大小
? ? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;? ?//外設(shè)地址不增加
? ? DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;? ?? ?? ?? ?//內(nèi)存地址自增1
? ? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;? ? ? ? ? ? ? ? //外設(shè)數(shù)據(jù)寬度8bit
? ? DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //內(nèi)存數(shù)據(jù)寬度8bit
? ? DMA_InitStructure.DMA_Mode =??DMA_Mode_Normal;? ?? ?? ?? ?? ?? ?? ?//DMA_Mode_Normal(只傳送一次), DMA_Mode_Circular (不停地傳送)
? ? DMA_InitStructure.DMA_Priority = DMA_Priority_High;? ?? ?? ?? ?? ? //(DMA傳送優(yōu)先級(jí)為高)
? ? DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? //非內(nèi)存到內(nèi)存
? ??
? ? ? ? DMA_Init(DMA1_Channel4, &DMA_InitStructure);? ? ? ?? ?? ?? ???

? ? ? ? DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE);? ?? ? //使能DMA通道4傳輸完成中斷?
? ? ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
? ? ? ? DMA_Cmd(DMA1_Channel4, ENABLE);
? ? ? ???
}
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的stm32 DMA 配置 串口程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美成人精品欧美一级 | 秋霞欧美视频 | 日韩成人综合网 | 手机在线不卡av | 亚洲成人自拍视频 | 欧美人与性囗牲恔配 | 国产片网站 | 免费黄色在线网站 | aaa成人| 国产第五页| 成人123| 亚洲AV无码精品黑人黑人 | 夜夜夜夜操 | 以女性视角写的高h爽文 | 尤物精品视频在线观看 | 国产一区二区三区久久 | 在线观看午夜 | 爱啪啪av | 成年免费视频 | 欧美性生活一区 | 久久97精品久久久久久久不卡 | 日屁网站| 视频一区日韩 | 夜夜夜网站 | 欧美日韩精品国产 | 香蕉网av | 羞羞动漫在线观看 | 亚洲AV成人无码电影在线观看 | 男女网站在线观看 | 日韩久| 香蕉av777xxx色综合一区 | 少妇紧身牛仔裤裤啪啪 | 伊人精品在线观看 | 成人在线观看网 | 日本在线不卡一区 | 一级视频在线观看 | 免费看黄色大片 | 日本韩国欧美一区二区三区 | 激情久| 少妇太爽了在线观看 | 日韩欧美在线观看一区二区 | 五月婷婷视频在线 | 黑鬼大战白妞高潮喷白浆 | 亚洲偷 | 韩国美女福利视频 | 波多野结衣三级视频 | 无码少妇一区二区三区芒果 | 国产精品三区在线观看 | 夜夜天天 | 国产大片av | 久久123 | 婷婷狠狠 | 欧美私人情侣网站 | 免费看黄在线网站 | 日韩精品 欧美 | 国产综合精品一区二区三区 | 成人动漫在线播放 | 伊人9| 欧洲视频在线观看 | 欧洲av在线 | 国产一级免费观看 | 摸一摸操一操 | 久久久久久天堂 | 亚洲www色 | 欧美性久久久久 | 国产18禁黄网站免费观看 | 天天舔天天插 | 极品白嫩少妇无套内谢 | 天海翼中文字幕 | 日本黄色aaa| 91猎奇在线观看 | 久久久黄色网 | 麻豆疯狂做受xxxx高潮视频 | 欧美精品自拍偷拍 | 天天躁日日躁aaaa视频 | 国产精品va在线 | 六月婷婷久久 | 久久一线 | 人人插人人草 | 国产少妇自拍 | 九九激情网 | 成人久久久久 | 国产成人91 | a√天堂网 | 黄色小视频大全 | 秋霞国产午夜精品免费视频 | 亚洲免费网站 | 欧美三级一区二区三区 | 香蕉视频性 | 可以免费看的av | 天天艹 | 自拍偷拍av| 用力使劲高潮了888av | 国产视频首页 | 成人免费黄色网址 | 99热香蕉| 91精品视频一区二区三区 | 国产亚洲精品久久久久婷婷瑜伽 | 中文字幕3 |