本代碼基于STM32F030F4P6,用例為DMA控制串口發(fā)送,需要注意以下幾點(diǎn)
1、注意串口IO配置,包括IO配置和復(fù)用功能選擇
2、STM32F030系列的DMA不支持外設(shè)到外設(shè),STM32F030只有DMA1,沒有DMA2
3、注意不同外設(shè)對(duì)應(yīng)不同DMA通道,而且不同芯片的通道也不一定相同,注意看數(shù)據(jù)手冊(cè)
直接代碼如下:
#include "stm32_lib/inc/stm32f0xx_rcc.h"
#include "stm32_lib/inc/stm32f0xx_gpio.h"
#include "stm32_lib/inc/stm32f0xx_usart.h"
#include "stm32_lib/inc/stm32f0xx_dma.h"
//以下兩種地址寫法都可以
#define USART1_TDR_Address ((uint32_t)(USART1_BASE+0x28))
//#define USART1_TDR_Address (uint32_t)(&USART1->TDR)
unsigned char hellStr[]={'H','E','L','L','O'};
void RCC_Config(void);
void GPIO_Config(void);
void USART_Config(void);
void DMA_Config(void);
int main(void)
{
SystemInit();
RCC_Config();
GPIO_Config();
USART_Config();
DMA_Config();
//使能DMA通道2,意味著開始傳輸
DMA_Cmd(DMA1_Channel2,ENABLE);
while (1)
{
}
}
void RCC_Config(void)
{
//時(shí)鐘配置
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
}
void GPIO_Config(void)
{
//選擇引腳
//針對(duì)F030F4P6,TX有PA2和PA9可選,RX有PA3和PA10可選,特別注意查看文檔是AF多少
//GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);
//GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
//引腳設(shè)置
GPIO_InitTypeDef PORT_UART1_TX; //定義TX腳,PORT_UART1_TX是自定義名稱,可以任意
PORT_UART1_TX.GPIO_Pin = GPIO_Pin_9; //此參數(shù)根據(jù)上面選擇的引腳來定
PORT_UART1_TX.GPIO_Speed = GPIO_Speed_10MHz;
PORT_UART1_TX.GPIO_Mode = GPIO_Mode_AF;
PORT_UART1_TX.GPIO_PuPd = GPIO_PuPd_NOPULL;
//IO初始化
GPIO_Init(GPIOA, &PORT_UART1_TX);
GPIO_InitTypeDef PORT_UART1_RX; //定義RX腳
PORT_UART1_RX.GPIO_Pin = GPIO_Pin_10; //此參數(shù)根據(jù)上面選擇的引腳來定
PORT_UART1_RX.GPIO_Speed = GPIO_Speed_10MHz;
PORT_UART1_RX.GPIO_Mode = GPIO_Mode_AF;
PORT_UART1_RX.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &PORT_UART1_RX);
}
void USART_Config(void)
{
//串口參數(shù)配置
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200; //設(shè)置波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //設(shè)置數(shù)據(jù)長度
USART_InitStructure.USART_Parity = USART_Parity_No; //設(shè)置奇偶校驗(yàn)
USART_InitStructure.USART_StopBits = USART_StopBits_1; //設(shè)置停止位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //設(shè)置流控制
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //設(shè)置模式
USART_Init(USART1, &USART_InitStructure);
//使能DMA發(fā)送
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//串口1發(fā)射 DMA使能
//使能
USART_Cmd(USART1, ENABLE);
}
void DMA_Config(void)
{
//特別注意,對(duì)于STM32F030F4P6,USART1_TX對(duì)應(yīng)通道2,注意看數(shù)據(jù)手冊(cè)
DMA_DeInit(DMA1_Channel2);
DMA_InitTypeDef DMA_InitStructure;
DMA_InitStructure.DMA_PeripheralBaseAddr=USART1_TDR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)hellStr;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize=5;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA1_Channel2,&DMA_InitStructure);
}
上一篇:STM32F030系列實(shí)現(xiàn)仿位帶操作
下一篇:STM32F030F4P6 Flash容量問題
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 智能護(hù)眼臺(tái)燈設(shè)計(jì)
- 蓄電池高能脈沖充電系統(tǒng)設(shè)計(jì)
- 基于51單片機(jī)定時(shí)器的電子時(shí)鐘設(shè)計(jì)方案
- 瑞薩電子推出面向單電機(jī)應(yīng)用優(yōu)化的卓越MCU, 涵蓋電動(dòng)工具、家用電器等廣泛應(yīng)用場景
- 地平線陳黎明:中高階智能駕駛拐點(diǎn)已到,將迎來快速增長
- 格芯收購MIPS:RISC-V技術(shù)路線的新變量
- 消息稱蜂巢能源獲smart電池項(xiàng)目定點(diǎn)
- 極氪9X有哪些豪華混動(dòng)技術(shù)?
- 重磅!電動(dòng)汽車換電新國標(biāo)發(fā)布!
- 緊跟全球行業(yè)變革浪潮 采埃孚引領(lǐng)汽車底盤技術(shù)革新
- 英特爾前 CEO 帕特?基辛格再創(chuàng)業(yè):評(píng)估 AI 模型是否符合特定的人類價(jià)值觀
- 汽車動(dòng)力傳動(dòng)機(jī)引擎及機(jī)械/實(shí)體參數(shù)測試
- 車云一體數(shù)據(jù)閉環(huán)的趨勢
- 車云一體其他層面的架構(gòu)設(shè)計(jì)借鑒-上
- 【搶樓】正式開始!來搶TI LM3S811評(píng)估板吧!!!
- LYTSwitch-1 LED驅(qū)動(dòng)器 天生小體積,應(yīng)用高效率,圍觀有好禮!
- 【搶樓有禮】聊聊vishay照明應(yīng)用在我們身邊哪些地方!
- TI MCU 常見問題(FAQ)大搜集
- 你有原創(chuàng),我有豪禮!(原創(chuàng)精選評(píng)選第7期)
- 與未來同行-是德科技創(chuàng)新技術(shù)峰會(huì)·北京
- 更好的你我,更好的EEWorld!2020年終慶典
- 下載MPS汽車電機(jī)控制技術(shù)干貨,贏【Keep體脂秤、自動(dòng)洗手機(jī)套裝、小米保溫杯】,開啟汽車技術(shù)進(jìn)階之旅!
- 【已結(jié)束】PI 直播【適合工業(yè)市場輔助電源的碳化硅和氮化鎵 IC】(9:30入場)
- BeagleBone Black 開發(fā)板 DIY 創(chuàng)意設(shè)計(jì)大賽
- KUKA機(jī)器人電機(jī)插接頭的針腳布局
- iPhone 12也有了"游戲模式"
- 小米MIX 4下月發(fā)布:或?yàn)槭卓铍p曲面屏下攝像頭手機(jī)
- LG暫停和蘋果談判,不再考慮在其門店出售iPhone
- realme Pad平板電腦真機(jī)照曝光
- 引領(lǐng)汽車產(chǎn)業(yè)未來 “世界智能網(wǎng)聯(lián)汽車大會(huì)”將在京舉辦
- 汽車以太網(wǎng)標(biāo)準(zhǔn)的重要性
- AI在汽車中的應(yīng)用:實(shí)用深度學(xué)習(xí)
- 汽車LED車燈方案
- Seeing Machines為自動(dòng)化調(diào)研汽車推出Guardian BdMS系統(tǒng)