基于STM32实现流水灯【Proteus仿真】

news2024/9/21 7:38:23

详情更多 wechat:嵌入式工程师成长日记

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247485624&idx=1&sn=4e553234c2624777409bd2067a07aad8&chksm=cf430de0f83484f6189b119d9d83ea6e6f2a85d13afaa04d218483918231c38e6382d3007061&token=767249363&lang=zh_CN#rdicon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247485624&idx=1&sn=4e553234c2624777409bd2067a07aad8&chksm=cf430de0f83484f6189b119d9d83ea6e6f2a85d13afaa04d218483918231c38e6382d3007061&token=767249363&lang=zh_CN#rd

通过配置寄存器初始化LED:

代码:

//LED IO初始化void LED_Init(void){  RCC->APB2ENR|=1<<4;    //使能PORTC时钟  GPIOC->CRL&=0X00000000;//清零  GPIOC->CRL|=0X33333333;//推挽50MHz输出  GPIOC->ODR=0X00FF;      //输出高}

①CRL寄存器(端口配置低寄存器):

图片

②APB2外设时钟使能寄存器:

图片

③ODR端口输出数据寄存器:

图片

总结:


STM32每个IO端口都有7个寄存器控制:

  1. 1.两个32位 端口配置寄存器-- CRL和CRH
    2.两个32位 数据寄存器-- IDR和ODR
    3.一个32位 置位/复位寄存器-- BSRR
    4.一个16位 复位寄存器-- BRR
    5.一个32位 锁存寄存器-- LCKR

  2. 主程序(main.c):

#include "main.h"

void KEY_IO_Init(void);//按键初始化
void EXTIx_Init(void);//外部中断
void EXTI0_IRQHandler(void);
void EXTI1_IRQHandler(void);
//LED IO初始化
void LED_Init(void)
{
  RCC->APB2ENR|=1<<4;    //使能PORTC时钟
  GPIOC->CRL&=0X00000000;//清零
  GPIOC->CRL|=0X33333333;//推挽50MHz输出
  GPIOC->ODR=0X00FF;      //输出高
}


int main(void){
  uint8_t count_i;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断向量分组 2

  KEY_IO_Init();
  EXTIx_Init();//外部中断初始化
  while(1){  
  LED_Init();//初始化与LED连接IO口
  while(1)
  {  
  
  }
    }
  return 0;
}


void KEY_IO_Init(void)//按键初始化
{
   GPIO_InitTypeDef  GPIO_InitStructure;   
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能PB端口时钟
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //按键输入端口配置
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     
   GPIO_Init(GPIOB, &GPIO_InitStructure);  
}  
void EXTIx_Init(void)//外部中断
{
  NVIC_InitTypeDef NVIC_InitStructure;  //NVIC寄存器结构体变量
  EXTI_InitTypeDef EXTI_InitStructure;  //外部中断相关寄存器结构体变量
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能IO复用功能时钟
  
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); //
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); //
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource2); //
  
  //配置外部中断4相关寄存器
  EXTI_InitStructure.EXTI_Line = EXTI_Line0|EXTI_Line1|EXTI_Line2;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  
  EXTI_Init(&EXTI_InitStructure);
  
  //中断通道使能
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//使能外部中断通道0
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  
  NVIC_Init(&NVIC_InitStructure);
  
    //中断通道使能
  NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//使能外部中断通道1
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  
  NVIC_Init(&NVIC_InitStructure);
  
    //中断通道使能
  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//使能外部中断通道2
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  
  NVIC_Init(&NVIC_InitStructure);
  
  
}

void EXTI0_IRQHandler(void)
{
      int i;
  for(i=0;i<8;i++)
    {
      GPIOC->ODR=~(1<<i);//输出低
      delay_ms(500);
    }
    GPIOC->ODR=0xff;
  EXTI_ClearITPendingBit(EXTI_Line4);//清除中断挂起标志位
}
void EXTI1_IRQHandler(void)
{
      int i;
  for(i=8;i>=0;i--)
    {
      GPIOC->ODR=~(1<<i);//输出低
      delay_ms(500);
    }
    GPIOC->ODR=0xff;
  EXTI_ClearITPendingBit(EXTI_Line4);//清除中断挂起标志位
}

  1. 运行效果:

    图片

 

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

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

相关文章

【大语言模型LLM】- Meta开源推出的新一代大语言模型 Llama 3

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…

【图说】VMware Ubuntu22.04 详细安装教程

前言 无论是从事 Linux 开发工作&#xff0c;还是希望电脑运行双系统&#xff0c;VMware 虚拟机都是我们日常工作不可或缺的工具。本章将会重点介绍 VMware 安装流程&#xff0c;以及在 VMware 上如何运行、使用 Ubuntu22.04 系统。 一、VMware 下载安装 1.1 VMware 官网下载…

使用虚拟信用卡订阅Starlink教程

Starlink 是由 SpaceX 公司开发的卫星互联网服务平台。它旨在通过将成千上万的卫星部署到地球轨道上&#xff0c;为全球范围内的用户提供高速互联网接入。通过 Starlink&#xff0c;用户可以通过卫星连接接入互联网&#xff0c;无需依赖传统的地面基础设施&#xff0c;这对于偏…

软考高项(已通过,E类人才)-学习笔记材料梳理汇总

软考高项&#xff0c;即软考高级信息系统项目管理师&#xff0c;全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试中的高级水平测试。适用于从事计算机应用技术、软件、网络、信息系统和信息服务等领域的专业人员&#xff0c;以及各级企业管理人员和从事项目…

基于K-means和FCM算法的合成纹理图像及SAR图像的分割

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

免 Administrator 权限安装软件

以欧路词典为例, 从官网下载的安装包 https://www.eudic.net/v4/en/app/download 直接运行会弹出 UAC 提示需要管理员权限. 一个词典而已, 为啥要管理员权限呢? 答案是安装程序默认使用的安装路径是 C:\Program Files\ 这就不难理解了. 对于这种不需要其他额外权限的软件, 可以…

zabbix自动发现和自动注册

一、zabbix自动发现 1.1 确保客户端上的zabbix-agent2服务器状态正常 1.2 在web页面删除原有的客户端主机 1.3 在服务端和客户端上配置hosts 1.4 web端配置自动发现 二、zabbix自动注册 2.1 环境配置 2.2 修改zabbix-agent2配置文件 过滤非#或非&#xffe5;开头的内容 2.3 we…

Qt 跨平台开发的一丢丢总结

Qt 跨平台开发 文章目录 Qt 跨平台开发摘要第一 \ & /第二 神奇{不能换行显示第三 预处理宏 关键字&#xff1a; Qt、 win、 linux、 lib、 MSVC 摘要 最近一直在琢磨Qt跨平台开发的问题&#xff0c;缘由有以下几个&#xff0c; 首先第一个&#xff0c;我们目前开发…

【剪映专业版】03立体自动翻页

【剪映专业版】立体自动翻页制作 1.导入素材&#xff0c;图片或视频均可 2.将素材2拖动至素材1的上方&#xff0c;点击蒙版&#xff0c;选择线性蒙版&#xff0c;并旋转为90度。 3.复制素材1&#xff0c;并拖动到素材2上方&#xff0c;分割并删除后半部分&#xff0c;点击蒙版…

Java进阶-Stream流

概述 在Java8中&#xff0c;得益于lambda所带来的函数式编程&#xff0c;引入了一个全新的Stream流的概念目的&#xff1a;用于简化集合和数组操作的api 案例 需求&#xff1a;创建一个集合存储多个字符串元素&#xff0c;将集合中所有以“z”开头的元素存储到新的集合中&am…

邀请全球创作者参与 The Sandbox 创作者训练营

作为首屈一指的元宇宙平台之一&#xff0c;The Sandbox 的使命是成为全球创作者的中心。随着我们对 Game Maker 的不断改进、旨在激发创作者灵感的定期 Game Jams、革命性的 "创作者挑战 "以及众多其他活动的开展&#xff0c;我们见证了大量个人加入我们充满活力的创…

C++ 虚表起源

本文会让看不见 摸不着的虚表(Vtable),虚指针(Vptr)彻底现行 本文涉及思想: C 面向对象 封装 继承 多态 中的 多态 概念解释: 虚表指针&#xff1a; 这是指向虚表&#xff08;vtable&#xff09;的指针&#xff0c;虚表中包含了该类的所有虚函数对应的地址。 虚表&#x…

每日一题 — 二分查找

704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 朴素二分查找模板&#xff1a; while(.......){//防止溢出int mid left(right - left)/2;if(........){right mid-1;}else if(......){left mid1;}else{return mid;}} 代码&#xff1a; public int search(int[] num…

十六、Qgis工具如何将shp转换geoJson类型文件

在使用GIS地图的时候线路图是非常重要的一个部分,根据以前的下载方法下载好了Qgis工具,那么如何将在openstreetmap下载下来的.shp文件转换为geoJson呢,下面就来说说。 准备工作 一、首先肯定是下载好了中国地图的全部的.shp包。里面包含全国的地图,包含shp,cpg,dbf类型的道…

软考 系统架构设计师系列知识点之大数据设计理论与实践(18)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;17&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第5节 Lambda架构与Kappa架构的对比和设计选择 19.5.2 Lambda架构与Kappa架构的设计选择 根据Lambda与Kapp…

ArrayList与顺序表(2)

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1…

FFmpeg源码编译

msys2 依赖环境安装 依赖环境安装编译X264编译 fdk-aac文件处理编译x265编译FFmpeg 依赖环境安装 编译X264 用于h264 AVC视频格式编码 CCcl ./configure --enable-shared #指定使用cl,编译成动态链接库 make -j32 #使用32线程进行编码 make install命令一 关于第一条命令执…

专注 APT 攻击与防御—工具介绍—Sqlmap

sqlmap参数详解&#xff1a; 由于Sqlmap 是常用工具之一&#xff0c;所以本篇的篇幅较长&#xff0c;详解一次所有参数。 1、Options&#xff08;选项&#xff09; Usage: python sqlmap.py [options]Options&#xff08;选项&#xff09;:-h, --help Show basic help messa…

Ultralytics YOLOv8 英伟达™ Jetson®处理器部署

系列文章目录 前言 本综合指南提供了在英伟达 Jetson设备上部署Ultralytics YOLOv8 的详细攻略。此外&#xff0c;它还展示了性能基准&#xff0c;以证明YOLOv8 在这些小巧而功能强大的设备上的性能。 备注 本指南使用Seeed Studio reComputer J4012进行测试&#xff0c;它基于…

金融风控信用评分卡建模(Kaggle give me credit数据集)

1 数据预处理数据 数据来源于Kaggle的Give Me Some Credit&#xff0c;包括25万条个人财务情况的样本数据 1.1 导包读数据 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestRegressor import seaborn as …