ARM接口实验-LED灯实验(A7核)
一、實現原理分析
本次實驗使用開發板為:SRM32MP157A-FSMP1A,
LED燈絲印為:LD1、LD2、LD3,通過查詢電路圖可知其對應引腳為:LD1->PE10、LD2->PF10、LD3->PE8
由于控制LED通斷的三極管采用的是NPN結構,所以只要給基極高電平,即給PE10、PF10、PE8三個引腳高電平,LED即可亮起
二、芯片手冊分析
2.1框圖分析:
?軟件編程控制硬件思想:內核是通過向特殊功能寄存器中書寫和讀取值,來控制外設進行工作
GPIO控制器:通用的輸入輸出控制器
RCC控制器:SOC的心臟,對其他控制器進行使能
實現步驟:
1.使用RCC寄存器對GPIO控制器進行使能
2.配置GPIO寄存器
????????2.1.MODEL改為輸出模式
????????2.2.OTYPER改為推挽輸出
??????? 2.3.OSPEEDR輸出速率為低速
??????? 2.4.PUPDR.不需要上拉電阻
??????? 2.5.ODR. 輸出數據寄存器,通過輸出高低電平來控制LED亮滅
三、代碼實現
3.1:頭文件:
#ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h"#define PIN_8 8 #define PIN_10 10//引腳對應GPIO初始化 void hal_gpio_init(); //寫函數,控制高低電平輸出 void hal_gpio_write();#endif功能文件:
#include "gpio.h"//引腳對應GPIO初始化 void hal_gpio_init(gpio_t* GPIO_Temp,unsigned int Pin) {//RCC使能GPIOE/GPIOFRCC->MP_AHB4ENSETR |= (0X1 <<4);RCC->MP_AHB4ENSETR |= (0X1 <<5);//設置GPIO控制器//輸出模式 01GPIO_Temp->MODER &= (~(0x3 << Pin*2));GPIO_Temp->MODER |= (0X1 << Pin*2);//推挽輸出 0GPIO_Temp->OTYPER &= (~(0X1 << Pin));//低速 00GPIO_Temp->OSPEEDR &= (~(0x3 <<Pin*2));//禁止上下拉 00GPIO_Temp->PUPDR &= (~(0X3 <<Pin*2));} //寫函數,控制高低電平輸出 void hal_gpio_write(gpio_t *GPIO_Temp,unsigned int Pin) {if(GPIO_Temp->ODR &= (0x1 <<Pin)){GPIO_Temp->ODR &= (~(0X1 << Pin));}else{GPIO_Temp->ODR |= (0X1<<Pin);}}主函數
#include "gpio.h"extern void printf(const char *fmt, ...);void delay_ms(int ms){int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);}int main(){hal_gpio_init(GPIOE,PIN_8); // LED燈初始化hal_gpio_init(GPIOE,PIN_10); // LED燈初始化hal_gpio_init(GPIOF,PIN_10); // LED燈初始化while(1){hal_gpio_write(GPIOE,PIN_10);delay_ms(500);hal_gpio_write(GPIOE,PIN_8);delay_ms(500);hal_gpio_write(GPIOF,PIN_10);delay_ms(500);}return 0;}四:功能測試
1.執行make語句后生成 .bin文件
2.在串口執行程序
??????? 2.1在交互模式下輸入 loadb c0008000
??????? 2.2 將.bin文件拖入串口工具窗口內,選取send Kermit
?????????
??????? 2.3 輸入 go c0008000
3, 實驗現象
總結
以上是生活随笔為你收集整理的ARM接口实验-LED灯实验(A7核)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: freemarker 的xml模板
- 下一篇: 怎么制作出GIF动态图?制作方法其实非常