1.N32G45簡介
N32G45系列集成了最新一代嵌入式ARM Cortex?-M4F處理器,在Cortex?-M3內核的基礎上強化了運算能力、新增加了浮點運算處理單元(FPU)、DSP和并行計算指令,提供1.25DMIPS/MHz的優異性能。
同時其高效的信號處理能力與Cortex-M系列處理器的低功耗,低成本和易于使用的優點組合,用以滿足需要控制和信號處理混合能力且易于使用的應用場景。
ARM Cortex?-M4F 32位精簡指令集處理器具有優異的代碼效率,通常采用8位和16位器件的存儲器空間即可發揮ARM內核的高性能。
2.N32外設功能
高達 512KByte 片內 Flash,支持加密存儲、多用戶分區管理及數據保護,支持硬件 ECC 校驗,10萬次擦寫次數,10 年數據保持。
144KByte 片內 SRAM(包含 16KByte Retention RAM),Retention RAM 支持硬件奇偶校驗。
通訊接口 ??
― 7 個 U(S)ART 接口, 最高速率達 4.5 Mbps,其中 3 個 USART 接口(支持 1xISO7816,1xIrDA, LIN),4 個 UART 接口
?? ― 3 個 SPI 接口,速度高達 36 MHz,其中 2 個支持 I2S
?? ― 1 個 QSPI 接口,速率高達 144 Mbps
?? ― 4 個 I2C 接口,速率高達 1 MHz,主從模式可配,從機模式下支持雙地址響應
?? ― 1 個 USB2.0 Full speed Device 接口
?? ― 2 個 CAN 2.0A/B 總線接口
?? ――2 個 12bit 5Msps 高速 ADC,多種精度可配置,6bit 模式下采樣率高達 9Msps,多達 18 路外部單端輸入通道,支持差分模式
?? ――2 個 12bit DAC,采樣率 1Msps
?? ――支持外部輸入獨立參考電壓源
?? ――所有模擬接口支持 1.8~3.6V 全電壓工作
最大支持 97 個支持復用功能的 GPIOs,大多數 GPIO 支持 5V 耐壓.
2個高速 DMA 控制器,每個控制器支持 8 通道,通道源地址及目的地址任意可配
RTC 實時時鐘,支持閏年萬年歷,鬧鐘事件,周期性喚醒,支持內外部時鐘校準
定時計數器
?? ――2 個 16bit 高級定時計數器,支持輸入捕獲、輸出比較、PWM 輸出以及正交編碼輸入等功能,最高控制精度 6.9nS。每個定時有 4 個獨立的通道,其中 3 個通道支持 6 路互補 PWM 輸出
?? ――4 個 16bit 通用定時計數器, 每個定時器有 4 個獨立通道,支持輸入捕獲/輸出比較/PWM 輸出
?? ――2 個 16bit 基礎定時計數器
?? ――1x 24bit SysTick
?? ――1x 7bit 窗口看門狗(WWDG)
?? ――1x 12bit 獨立看門狗( IWDG)
3.基于N32G457VEL7開發板介紹
N32G45XVL-STB 開發板用于國民技術股份有限公司高性能 32 位 N32G45XVL 系列芯片的樣片開發?;贏RM架構的Cortex-M4F內核,時鐘頻率為144MHZ,存儲空間flash大小為512KB,運行空間Sram大小為144KB。
支持串口下載,Jlink下載仿真、USB下載以及CMSIS-DAP下載仿真。板子本身自帶CMSIS-DAP接口電路。
開發板原理圖如下
3.基于N32G45的按鍵操作
關于N32G45的工程創建可查看帖子: https://bbs.elecfans.com/jishu_2320004_1_1.html
1.要實現按鍵驅動可分為三個步驟:1.開時鐘;2配置GPIO口;3.上下拉。
接下來,我們先看下按鍵的硬件接口,原理圖如下:
根據原理圖可知,按鍵的硬件接口為:
S1 ---PA4 S2 ---PA5 S3 ---PA6
有了硬件接口,我們即可按照3步操作即可。
開時鐘
要開啟時鐘,我們可以先看下N32G45的系統構架,系統構架框圖如下:
根據系統構架框圖可以看出,整個內核結構分為三條總線:AHB、APB2、APB1。其中AHB總線時鐘頻率為144MHZ,APB2上時鐘總線為72MHZ、APB1上時鐘總線為36MHZ。
根據按鍵原理圖,我們只需要開啟PA時鐘即可
/*1.開時鐘*/ RCC->APB2PCLKEN|=1<<2;//PA
配置GPIO口
對應GPIO端口配置,我們需要參考用戶手冊的第7章節。
GPIO( General purpose input/output) 即通用型 I/O, AFIO( Alternate-function input/output) 即復用功能 I/O。芯片最多支持 97 個 GPIO,共被分為 7 組(GPIOA/GPIOB/GPIOC/GPIOD/GPIOE/GPIOF/GPIOG),每組 16個端口( F 組共 10 個, G 組共 7 個)。 GPIO 端口和其他的復用外設共用引腳,用戶可以根據需求靈活配置。
每個 GPIO 引腳都可以獨立配置成輸出、輸入或復用的外設功能端口。除了模擬功能引腳外,其他的 GPIO引腳都有大電流通過能力。
GPIO 端口可由軟件分別配置成以下模式:
???■ 輸入浮空
???■ 輸入上拉
???■ 輸入下拉
???■ 模擬功能
???■ 開漏輸出
???■ 推挽輸出
???■ 推挽復用功能
???■ 開漏復用功能
對應按鍵,我們需要配置的模式為推挽輸出。
端口模式配置寄存器:
按鍵GPIO口配置如下:
/*配置GPIO口*/ GPIOA->PL_CFG&=0xF000FFFF; GPIOA->PL_CFG|=0x08880000;//上拉/下拉輸入模式
注意:由于按鍵是做檢測,判斷按鍵是否按下,所以按鍵模式配置需要設置為輸入模式。
上下拉
上下拉操作,即設置初始化的電平狀態??赏ㄟ^GPIO_POD或者GPIO_PBSC實現。
根據按鍵硬件原理圖,按鍵按下為低電平,要想正常檢測到按鍵是否按下,則需要產生一個由高電平到低電平的跳變過程,因此按鍵需要設置為上拉模式。
GPIOA->POD|=0x7<<4;//上拉,將PA4~PA6設置為高電平
3.2 按鍵檢測
為方便后續按鍵使用,我們可以單獨封裝一個按鍵檢測函數,通過返回值確定哪個按鍵按下。
/***************檢測按鍵函數************* **硬件接口:KEY1 --PA0 按下為高電平 ** KEY2 --PA1 按下為低電平 ** KEY3 --PA4按下為低電平 ** KEY4 --PA5按下為低電平 **返回值:KEY1按下 --返回1 ** KEY2按下 --返回2 ** KEY3按下 --返回3 ** KEY4按下 --返回4 **沒有按鍵按下:返回0 **注:該函數一次只能檢測一個按鍵是否按下 **作者:IT_阿水 ******************************************/ u8 Key_Scan(void) { static u8 stat=0;//按鍵按下標志位 if((!KEY1 || !KEY2 || !KEY3) && (stat==0))//是否有按鍵按下 { Delay_Ms(20);//延時消抖 stat=1;//表示有按鍵按下 if(KEY1==0)return 1; else if(KEY2==0)return 2; else if(KEY3==0)return 3; } else { if(KEY1 && KEY2 && KEY3 )stat=0;//是否所有按鍵都松開 } return 0;//沒有按鍵按下 }
注意,上面函數中KEY1、KEY2、KEY3均是通過位帶方式實現,具體寫法查看帖子:https://bbs.elecfans.com/jishu_2320004_1_1.html
3.3 按鍵控制LED燈
通過任意一個按鍵,實現LED的亮滅。
#include "n32g45x.h" #include "led.h" #include "key.h" #include "delay.h" int main() { u8 key_val; LED_Init(); KEY_Init(); while(1) { key_val=Key_Scan(); if(key_val) { LED_D1=!LED_D1; LED_D2=!LED_D2; LED_D3=!LED_D3; } } }
實現效果如下:
按下按鍵所有的LED點亮,再按一次按鍵所有的LED熄滅。
審核編輯:劉清
-
嵌入式技術
+關注
關注
10文章
360瀏覽量
35666 -
按鍵驅動
+關注
關注
0文章
11瀏覽量
7126 -
n32g455
+關注
關注
0文章
7瀏覽量
917
發布評論請先 登錄
相關推薦
評論