基于N32G45的按键驱动

news2024/9/23 11:16:07

基于N32G45的按键驱动

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 总线接口;
       ― 1 个 SDIO 接口,支持 SD/MMC 格式;
  • ADC模拟接口
    ―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.N32命名规则

在这里插入图片描述

3.基于N32G457VEL7开发板介绍

  N32G45XVL-STB 开发板用于国民技术股份有限公司高性能 32 位 N32G45XVL 系列芯片的样片开发。基于ARM架构的Cortex-M4F内核,时钟频率为144MHZ,存储空间flash大小为512KB,运行空间Sram大小为144KB
  支持串口下载,Jlink下载仿真、USB下载以及CMSIS-DAP下载仿真。板子本身自带CMSIS-DAP接口电路。
在这里插入图片描述

  • 开发板原理图如下
    在这里插入图片描述

4.基于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;//上拉/下拉输入模式

注意:由于按键是做检测,判断按键是否按下,所以按键模式配置需要设置为输入模式。</font

  • 上下拉

  上下拉操作,即设置初始化的电平状态。可通过GPIO_POD或者GPIO_PBSC实现。
  根据按键硬件原理图,按键按下为低电平,要想正常检测到按键是否按下,则需要产生一个由高电平到低电平的跳变过程,因此按键需要设置为上拉模式
在这里插入图片描述

  GPIOA->POD|=0x7<<4;//上拉,将PA4~PA6设置为高电平

4.1 按键检测

  为方便后续按键使用,我们可以单独封装一个按键检测函数,通过返回值确定哪个按键按下。

/***************检测按键函数*************
**硬件接口: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;//没有按键按下
}

4.2 按键控制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熄灭。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA复习【11】单列集合Collection:ArrayList、 LinkedList、HashSet、TreeSet学习与使用

1.首先思考一个问题&#xff1a;为什么要有集合&#xff1f; 我们也知道&#xff0c;数组可以保存多个对象&#xff0c;但是在某些情况下无法确定到底需要保存多少个对象&#xff0c;此时数组不再适用没因为数组的长度不可变&#xff0c;例如&#xff0c;要保存一个学校的学生信…

移动WEB开发之rem布局--less基础

维护 css 的弊端 CSS 是一门非程序式语言&#xff0c;没有变量、函数、SCOPE&#xff08;作用域&#xff09;等概念。 CSS 需要书写大量看似没有逻辑的代码&#xff0c;CSS 冗余度是比较高的。 不方便维护及扩展&#xff0c;不利于复用。 CSS 没有很好的计算能力 非前端开…

前馈神经网络与支持向量机实战 --- 手写数字识别

前馈神经网络与支持向量机实战 — 手写数字识别 文章目录前馈神经网络与支持向量机实战 --- 手写数字识别一、前馈神经网络介绍二、支持向量机介绍三、数据集说明四、环境准备五、实验要求六、Python代码tutorial_minst_fnn-keras.py&#xff1a;使用TensorFlow的Sequential实现…

Linux开发常用ps命令选项详解

【摘要】本文介绍了在Linux应用/内核开发调试中&#xff0c;经常需要用到的两个选项组合&#xff0c;当然&#xff0c;如果你需要查看更多更详尽的选项说明&#xff0c;可以参考man说明文档&#xff0c;即命令行下输入man ps进行查看。 aux选项组合 使用场景&#xff1a;更多…

算法日常训练12.4(最接近目标价格甜点成本)

只能说回溯实在是诡异&#xff0c;刚看到这题目思路一点不清晰&#xff0c;想着用回溯想到一点写一点&#xff0c;就这样诡异的出来了。 主要回溯思想&#xff0c;由于冰淇淋基料只能选一种&#xff0c;那就对数组遍历&#xff0c;每次对一种冰淇淋基料继续回溯&#xff0c;用r…

Proxmox VE 修改集群名称

作者&#xff1a;田逸&#xff08;formyz) Proxmox VE集群一旦创建&#xff0c;其集群的名称就固定下来。在Proxmox VE Web管理后台&#xff0c;没有相应的菜单或按钮对应与集群名称的修改&#xff08;仅仅发现修改虚拟机选项有修改名称的地方&#xff09;。在宿主系统Debian下…

网课题库接口

网课题库接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xff09; 题库…

[附源码]计算机毕业设计文曦家教预约系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

java计算机毕业设计ssm社团管理系统9e73v(附源码、数据库)

java计算机毕业设计ssm社团管理系统9e73v&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

计及新能源出力不确定性的电气设备综合能源系统协同优化(Matlab代码实现)

目录 第一部分 文献一《计及新能源出力不确定性的电气设备综合能源系统协同优化》 0 引言 &#xff11; 新能源出力不确定性处理 1.1 新能源出力预测误差分布 1.2 新能源出力的时间相关性 1.3 场景生成 &#xff12; 计及温控负荷调节能力的电气综合能源系统协同优化建模…

[附源码]计算机毕业设计文具商城购物系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【计算机毕业设计】基于JSP的毕业设计选题系统的设计与实现

分类号&#xff1a;TP315 U D C&#xff1a;D10621-408-(2007) 498-0 密 级&#xff1a;公 开 编 号&#xff1a;2002211105 成都信息工程学院 学位论文 基于JSP的毕业设计选题系统的设计与实现 摘 要 随着全球信息化技术的兴起&#xff0c;特别是Internet的日益普及&…

python -- PyQt5(designer)中文详细教程(四)事件和信号

事件 signals and slots也 被其他⼈翻译成信号和槽机制。 所有的应用都是事件驱动的。事件大部分都是由用户的行为产⽣的&#xff0c;当然也有其他的事件产生方式&#xff0c;比如网络的连接&#xff0c;窗口管理器或者定时器等。调⽤应⽤的exec_()⽅法时&#xff0c;应⽤会进⼊…

Python金融领域人工智能教程

Python金融领域人工智能教程 财务分析、时间序列分析、投资组合优化、CAPM、算法交易、Q-Learning 等等&#xff01; 课程英文名&#xff1a;Financial Engineering and Artificial Intelligence in Python 此视频教程共6.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰…

[附源码]Python计算机毕业设计Django网咖管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

ElementUI中Tree组件使用

首先官网上的树形控件教程地址为Element - The worlds most popular Vue UI framework 案例一&#xff1a; 要实现这种类型的树控件&#xff0c;并且后边相关操作&#xff1a; 1.1后端准备工作 首先&#xff0c;数据库表为&#xff1a; 查询接口返回的实体类为&#xff1a; …

给出32位有符号整数,将这个整数翻转

例1 收入123 输出321 例2 输入-123 输出-321 例3 输入120 输出21 答案 思路&#xff0c; 1、先考虑末尾是0的情况时&#xff0c;翻转后需要把0去掉&#xff0c; 2、当有-号时&#xff0c;把翻转后末尾的-号去掉&#xff0c;再在前面加一个-号 3、正数时不变 a -564…

轻松掌握线性代数-万字长文基础知识概览

轻松掌握线性代数-万字长文基础知识概览1 集合相关知识1.1 映射与像1.2 映射与像1.3 线性映射2 矩阵2.1 特殊矩阵2.1.1 零矩阵2.1.2 转置矩阵2.1.3 对称矩阵2.1.4 上三角矩阵2.1.5 下三角矩阵2.1.6 对角矩阵2.1.7 单位矩阵2.1.8 逆矩阵2.2 行列式2.2.1 根据行列式判断是否可逆2…

Java内存模型基础(JMM)

前言 在并发编程中&#xff0c;一般需要处理两个关键问题&#xff1a;线程通信、线程同步&#xff0c;然而线程通信一般的方式有&#xff1a;共享内存、消息传递。 对于共享内存的通信方式&#xff0c;线程同步是显示进行的&#xff0c;程序员必须指定某个方法或者某个代码段需…

并发基本原理(四):AQS源码解析1-ReentrantLock的lock实现原理

简介 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是JUC包中的核心抽象类&#xff0c;许多并发工具的实现&#xff0c;包括ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore 等都是基于此实现。 AQS&#xff0c;主要提供了表示同步状态的 state…