基于STM32F051K8芯片以DMA中断方式控制LED灯(手把手教学)
DMA基礎(chǔ)知識(shí)
DMA定義
DMA傳輸方式
實(shí)驗(yàn)
實(shí)驗(yàn)?zāi)康?/h2>
cubemx 配置
kail5打開(kāi),將代碼寫(xiě)入
實(shí)驗(yàn)現(xiàn)象
DMA基礎(chǔ)知識(shí)
DMA,全稱Direct Memory Access,即直接存儲(chǔ)器訪問(wèn),不占用cpu,不占用ahb,不占用apb,占用dma總線。DMA傳輸將數(shù)據(jù)從一個(gè)地址空間復(fù)制到另一個(gè)地址空間,提供在外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間的高速數(shù)據(jù)傳輸。
大家都知道,CPU無(wú)時(shí)無(wú)刻都在處理著大量的事務(wù),但是有些不是很重要的事情,比如數(shù)據(jù)的復(fù)制和存儲(chǔ),如果要讓CPU去處理的話,這就會(huì)很占用CPU的資源,尤其是在處理大量的復(fù)制和存儲(chǔ)時(shí),對(duì)CPU的消耗是很大的。但是我們可以將這些不重要的事情交給DMA去處理,讓CPU去處理更加重要的事情,這樣CPU就會(huì)很輕松了。
DMA定義
DMA用來(lái)提供在外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間的高速數(shù)據(jù)傳輸。無(wú)須CPU的干預(yù),通過(guò)DMA數(shù)據(jù)可以快速地移動(dòng)。這就節(jié)省了CPU的資源來(lái)做其他操作。
DMA傳輸方式
實(shí)驗(yàn)
實(shí)驗(yàn)?zāi)康?/h2>
電腦串口發(fā)送“l(fā)edon”-------------板子led亮
電腦串口發(fā)送“l(fā)edoff”-------------板子led滅
電腦串口發(fā)送“l(fā)edon”-------------板子led閃爍(亮一秒,滅一秒)
cubemx 配置
1 打開(kāi)CubeMX,搜索STM32F051K8,然后雙擊選擇STM32F051K8Ux。
2 按照?qǐng)D片順序進(jìn)行選擇。
3 將PB0、PB1、PB2都設(shè)置成輸出方式。
4 先切換到Configuration,然后選擇串口1
5 對(duì)串口的相關(guān)設(shè)置
6 對(duì)時(shí)鐘的設(shè)置
7 設(shè)置完成后,生成代碼。
8 配置項(xiàng)目,然后打開(kāi)項(xiàng)目
kail5打開(kāi),將代碼寫(xiě)入
1 編譯項(xiàng)目工程
2 將代碼添加到項(xiàng)目中
在main.c添加:
添加頭文件
在stm32f0xx_it.c 的USART1_IRQHandler(void)函數(shù)中添加:
#define MAXLENGTH 10 extern char reccount; extern char dmaendflag; if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE) == SET)//確認(rèn)是空閑中斷產(chǎn)生了 { __HAL_UART_CLEAR_FLAG(&huart1,UART_CLEAR_IDLEF); //清除uart1 的空閑中斷 標(biāo)志 HAL_UART_DMAStop(&huart1); //停止uart1 的dma 接收 //判斷收到了幾個(gè)字符? reccount = MAXLENGTH- hdma_usart1_rx.Instance->CNDTR; //CNDTR 初始值 10 , 收了1個(gè), 該寄存器的值就是9 dmaendflag = 1; //dma接收結(jié)束 }3 編譯項(xiàng)目
4 一鍵下載,使用ST_Link下載器進(jìn)行下載。
實(shí)驗(yàn)現(xiàn)象
1 使用串口工具,將波特率改為9600,發(fā)送ledon
led燈亮
2 發(fā)送ledon
led燈滅
3 發(fā)送ledblink
LED燈1秒亮1秒滅,循環(huán)閃爍,此處不方便展示動(dòng)圖,請(qǐng)見(jiàn)諒。
總結(jié)
以上是生活随笔為你收集整理的基于STM32F051K8芯片以DMA中断方式控制LED灯(手把手教学)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IAR forARM 建立第一个STM3
- 下一篇: ug区域轮廓铣没有重叠距离_多年大型模具