STM32库函数开发&按键库函数开发源码篇

发布者:快乐的小鸟最新更新时间:2024-06-04 来源: elecfans关键字:STM32  库函数 手机看文章 扫描二维码
随时随地手机看文章

  GPIO_Init(GPIOA, &GPIO_InitStruct);  


  //设置IO口与中断线的映射关系。

  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);



  EXTI_InitStruct.EXTI_Line  = EXTI_Line0;      //中断线0

  EXTI_InitStruct.EXTI_Mode  = EXTI_Mode_Interrupt;  //中断模式

  EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;  //下降触发

  EXTI_InitStruct.EXTI_LineCmd= ENABLE;        //中断使能

  //初始化线上中断,设置触发条件等。

  EXTI_Init(&EXTI_InitStruct);



  NVIC_InitStruct.NVIC_IRQChannel            = EXTI0_IRQn;     //中断通道,可在stm32f4xx.h文件当中查找

  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority  = 1;        //抢占优先级

  NVIC_InitStruct.NVIC_IRQChannelSubPriority      = 1;        //响应优先级

  NVIC_InitStruct.NVIC_IRQChannelCmd          = ENABLE;      //通道使能

  //配置中断分组(NVIC),并使能中断。

  NVIC_Init(&NVIC_InitStruct);



}





void delays(int n)

{

  int i,j;


  for(i=0; i< n; i++)

    for(j=0; j< 30000; j++);



}





/***************************************************************

1、中断服务函数是满足条件后,CPU自行执行的函数不需要主动调用

2、中断服务函数是不能传递值与返回值

3、STM32的中断服务函数名可在startup_stm32f40_41xxx.s中查找

****************************************************************/

//编写中断服务函数

void EXTI0_IRQHandler(void)

{

  //判断标志位是否1

  if(EXTI_GetITStatus(EXTI_Line0) == SET)

  {

    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)

    {

      //延时一段时间

      delays(15);


      if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)

      {

        GPIO_ToggleBits(GPIOF, GPIO_Pin_9);

      }  


    }

  }

  //清空中断线0

  EXTI_ClearITPendingBit(EXTI_Line0);    

}

main.c


#include 'stm32f4xx.h'

#include 'led.h'

#include 'key.h'





void delay(int n)

{

  int i,j;


  for(i=0; i< n; i++)

    for(j=0; j< 30000; j++);



}







int main(void)

{


  unsigned char count = 0;


  Key_Init();

  Led_Init();


  while(1)

  {

    //判断按键1是否按下 按下为低电平

    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)

    {

      //大约延时15ms 起到消抖作用

      delay(15);

      //判断按键1是否按下 按下为低电平

      if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)

      {

        //等待按键1松开

        while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET);

        //灯1状态变更

        GPIO_ToggleBits(GPIOF, GPIO_Pin_9);

      }    


    }  



    //判断按键2是否按下 按下为低电平

    if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == Bit_RESET)

    {

      //大约延时15ms 起到消抖作用

      delay(15);

      //判断按键2是否按下 按下为低电平

      if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == Bit_RESET)

      {

        //等待按键2松开

        while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == Bit_RESET);

        //灯2状态变更

        GPIO_ToggleBits(GPIOF, GPIO_Pin_10);

      }    


    }  


    //判断按键3是否按下 按下为低电平

    if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == Bit_RESET)

    {

      //大约延时15ms 起到消抖作用

      delay(15);

      //判断按键3是否按下 按下为低电平

      if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == Bit_RESET)

      {

        //等待按键3松开

        while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == Bit_RESET);

        //灯3状态变更

        GPIO_ToggleBits(GPIOE, GPIO_Pin_13);

      }    


    }  


    //判断按键4是否按下 按下为低电平

    if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4) == Bit_RESET)

    {

      //大约延时15ms 起到消抖作用

      delay(15);

      //判断按键4是否按下 按下为低电平

      if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4) == Bit_RESET)

      {

        //等待按键4松开

        while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4) == Bit_RESET);

        //灯4状态变更

        GPIO_ToggleBits(GPIOE, GPIO_Pin_14);

      }    


    }  

  }

  return 0;

}

作业


#ifndef __BEEP_H

#define __BEEP_H



#include 'stm32f4xx.h'



void Beep_Init(void);



#endif



#include 'beep.h'



/************************************

引脚说明



Beep -- PF8



************************************/

void Beep_Init()

{

  GPIO_InitTypeDef  GPIO_InitStruct;

  //使能GPIOF组时钟

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);  


  GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_8;    //引脚8

  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;  //输出模式

  GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;  //推挽输出

  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_DOWN;    //xia la

  GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_100MHz; //速度 


  GPIO_Init(GPIOF, &GPIO_InitStruct);



}



#include 'stm32f4xx.h'

#include 'beep.h'



void delay(int n)

{

  int i,j;


  for(i=0; i< n; i++)

    for(j=0; j< 30000; j++);



}



int main(void)

{

  Beep_Init();


  while(1)

  {

    GPIO_ResetBits(GPIOF, GPIO_Pin_8);

    delay(1000);


    GPIO_SetBits(GPIOF, GPIO_Pin_8);

    delay(1000);

  }



  return 0;

}


[1] [2]
关键字:STM32  库函数 引用地址:STM32库函数开发&按键库函数开发源码篇

上一篇:频率测量方法及STM32微控制器代码示例介绍
下一篇:基于RT-Thread与STM32F407的温湿度天气时钟设计案例

推荐阅读最新更新时间:2024-11-05 08:30

STM32 ADC多通道DMA传输
ADC多通道采集是在ADC单通道DMA传输的基础上写的,代码如下: volatile u16 adcconverdata ={0,0}; static void ADC_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;//添加PA2的GPIO初始化代码 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_Init(
[单片机]
STM32系列第31篇--MPU6050六轴传感器
简介: MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,内带3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,利用自带数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主IIC接口,可以向应用端输出完整的9轴姿态融合演算数据。 有了DMP,我们可以使用InvenSense公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度 。 特点: 自带数字运动处理( DMP: Digital Motion Processing ),可以输出6轴或9轴(需外接磁传感器)姿态解算数
[单片机]
一款基于stm32芯片的智能家居系统的设计
科学技术的高速发展大大提高了人们的生活品质,智能家居作为高品质生活的代表产品越来越受到人们的关注。智能家居是以居家环境为平台,融合了建筑、通信、网络、计算机、自动控制等技术形成的,集功能性、服务性、管理性为一体的舒适、安全、便利、环保的居住环境,是高新技术在生活中的典型应用之一。 本文基于Cortex—M3架构的STM32系列芯片,设计开发了一套智能家居系统。本系统以智能家居控制器为核心,包括智能插座、多功能面板、红外转发、电动窗帘、窗户控制模块、光强度及温、湿度计等多种智能家居产品,也可与红外探测器、烟感探测器、门禁控制器、网络摄像机等安防产品组建智能家居的安防系统。智能家居控制器可通过以太网或Wifi与家庭信息互联处理中心
[单片机]
一款基于<font color='red'>stm32</font>芯片的智能家居系统的设计
STM32 FSMC 总结
背景 做DP开发过程中,需要将DP芯片和ARM芯片进行通信,一般有两种方式: 1)IO端口(总线)方式来进行通信; 2)FSMC-存储器映射方式来进行通信; 之前的开发是采用第一种方式在F103芯片上开发,现在换F4平台,采用第二种方式来进行交互数据。 FSMC的基础 FSMC功能是类似 51 单片机的存储器映射功能,能管理多个外部不同种类的存储设备,具有方便,简单,快捷的优点。 目前支持的类型有: SRAM 、 ROM 、 PSRAM 、 NOR Flash 和NANDFlash 存储器 。 更多的关于FSMC的资料需要阅读STM32 手册对于FSMC的详细介绍。 VPC3+C + ARM +
[单片机]
<font color='red'>STM32</font> FSMC 总结
STM32中断理解
题外话: 几乎所有的要学习的实在或虚拟的事物(或仅仅是一个理论)都可以用下面的方法对其了解; 但对于具体某一个事物不一定需要全部研究下面的项目; 什么是XXX 为什么要XXX XXX的分类 XXX的组成 XXX的特点 XXX的流程 用及XXX时注意事项 其他特有项目 ----------------------------------------------- stm32中断主题: 1 什么是中断 暂停原先的程序或事情,执行另外一些程序或事情,执行完成后返回原来的程序。 2 为什么要中断 因为另一些程序或事情比你原先正在做的事情要重要,或者这些突发事情你是无法控制它的来临的。 3 中断的分类 按不同方法进行分类 3.1 内部中
[单片机]
再造STM32---第十六部分:SysTick—系统定时器
本章参考资料《ARM Cortex™-M4F 技术参考手册》 -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick 的简介和寄存器的详细描述。因为SysTick 是属于 CM4 内核的外设,有关寄存器的定义和部分库函数都在 core_cm4.h 这个头文件中实现。所以学习 SysTick 的时候可以参考这两个资料,一个是文档,一个是源码。 16.1 SysTick 简介: SysTick—系统定时器是属于 CM4 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSC
[单片机]
再造STM32---第十六部分:SysTick—系统定时器
STM32学习笔记--EXTI
1、PA0 ... PF0 共用一个中断标志 EXT0 PA1 ... PF1 共用一个中断标志 EXT1 . . . . PA15... PF15共用一个中断标志 EXT15 2、EXT5-9 共用一个中断源 EXT10-15 共用一个中断源 3、启用中断前,需ENABLE IO口的复用功能(AFIO) 4、设置中断IO口 5、将IO口注册到中断线(将IO口映射到中断线N) 例:GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3); 将GPIOD.3注册至                          
[单片机]
怎么使用ST的库开发STM32
我使用的芯片是 STM32F103VET 和编译器是 IAR ARM V5.5,调试器用 JLINK V8 1,下载ST的库,现在的版本是 STM32F10x_StdPeriph_Lib_V3.3.0,解压缩,然后将 Libraries整个拷贝到你的工作目录,Project 目录是很多演示代码,可以参考怎么怎么编程,很容易的,readme里面都有说明。 2,建立一个 IAR 的project 选择 C 的空项目,为了方便管理我分了多个文件夹,分别是 建立一个 CMSIS目录 放内核启动代码添加两个系统启动文件,分别是在 STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\CMSIS\CM3\Devi
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved