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