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

详情更多 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);//中断向量分组 2KEY_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;//使能外部中断通道0NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);//中断通道使能NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//使能外部中断通道1NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);//中断通道使能NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//使能外部中断通道2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2NVIC_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.mzph.cn/news/827453.shtml

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

相关文章

「React Native」为什么要选择 React Native 作为的跨端方案

文章目录 前言一、常见因素二、举个栗子2.1 项目背景2.2 为什么选择 React Native2.3 项目实施2.4 成果总结 前言 没有完美的跨端技术&#xff0c;只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 一、常见因素 共享代码库&#xff1a; React Native 允许开发者编写…

第⑮讲:Ceph集群管理与监控操作指南

文章目录 1.查看集群的状态信息2.动态的查看集群的状态信息3.查看集群的利用率4.查看OSD的资源利用率5.查看OSD的列表6.查看各组件的状态7.查看集群的仲裁信息8.查看/修改集群组件sock的配置参数 1.查看集群的状态信息 通过集群状态信息可以看到集群的健康状态、各个组件的运行…

PMP新版考试也要复习49个过程?如何复习更高效?

PMP中有五大过程组、十大知识领域&#xff0c;共计49个子过程&#xff0c;那么如何才能快速的记住这49个子过程&#xff0c;可以参考这篇文章理解加深记忆。 记忆需要花费时间&#xff1a;30分钟 记忆持续时间&#xff1a;永久 接下来按照思路进行 场景&#xff1a;大家都熟…

Springcloud中的@RefreshScope详解

一、概述 RefreshScope注解是Spring Cloud中的一个注解&#xff0c;它用来实现Bean中属性的动态刷新&#xff0c;这意味着您可以在不停止和重新启动应用程序的情况下更改配置&#xff0c;它在微服务配置中心的场景下经常出现。 二、RefreshScope 实现动态刷新的原理 1.在应用程…

粮油包装生产线的未来趋势:智能、环保与可持续发展

在当今世界&#xff0c;科技进步日新月异&#xff0c;智能化、环保和可持续发展已成为各行各业关注的焦点。粮油包装生产线作为食品产业链的重要环节&#xff0c;其未来发展趋势同样离不开这三大主题。星派将探讨粮油包装生产线的未来趋势&#xff0c;并展望其在智能、环保与可…

详解俄罗斯社媒平台VK广告推广如何开户?VK代理开户、费用、代运营流程

俄罗斯的VK&#xff08;VKontakte&#xff09;是当地常用的社交媒体平台&#xff0c;对于想要在俄罗斯市场推广产品的企业来说&#xff0c;VK广告投放是一个有效的渠道。以下是关于如何在VK上进行广告推广的开户流程、费用和代运营流程的详解&#xff1a; VK广告推广开户流程 …

海康Visionmaster-常见问题排查方法-启动阶段

VM试用版启动时&#xff0c;弹窗报错&#xff1a;加密狗未安装或检测异常&#xff1b;  问题原因&#xff1a;安装VM 的时候未选择软加密&#xff0c;选择了加密狗驱动&#xff0c;此时要使用软授权就出现了此现象。  解决方法&#xff1a; ① 首先确认软加密驱动正确安装…

机器学习入门:玩转sklearn库,AI写作

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

达芬奇调色:色彩理论入门

写在前面 整理一些达芬奇调色的笔记博文内容涉及&#xff1a; 一级调色是什么&#xff0c;以及 调色素材格式 log&#xff0c;raw&#xff0c;rec709 简单认知理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#…

【配置】私人笔记Jopin安装

介绍 安装在docker上面&#xff0c;这个笔记很牛&#xff0c;可以各个平台都能同步&#xff0c;安卓、苹果、win等 docker-compose 版本3.1&#xff0c;Jopin需要latest&#xff0c;否则可能出现不能同步笔记&#xff0c;我是出现了 官网 云服务器下新建文件夹在 /nwa/jopl…

基于SpringBoot+Vue的企业资产管理系统设计与实现

1、系统演示视频&#xff08;演示视频&#xff09; 2、需要请联系

hexo配置教程、主题使用及涉及的技术学习

一、背景 最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程. 方案 一开始的方案是从零开始,模仿常见个人博客的设计,基于vueSpringbootMySQL的去实现网站. 新建项目之后,发现vu…

大数据分析可视化实训平台(1)

大数据分析可视化实训平台是一款适用于高校教学和各领域企业的零门槛可视化工具。学生和企业用户通过大数据分析可视化实训平台&#xff0c;能够轻松地对数据进行处理、分析和可视化&#xff0c;从而更有效地理解和利用数据&#xff0c;提升决策的质量和效率。 主要参数 一、…

C/C++ 入门(7)string类(STL)

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 请多多指教&#xff01; 目录 一、标准库中的string 1、了解 2、string类常用接口说明 1、常见的构造函数 2、容量操作 ​编辑 3、访问及遍历操作 4、修改操作 5、非成员函数 二、string类实现 …

JAVA学习-行为抽象和Lambda.Lambda表达式

行为抽象和Lambda表达式是Java 8引入的新特性&#xff0c;用于简化代码和提高代码的可读性。 一、概述、特点、使用方法以及与其他比较和高级应用的说明&#xff1a; 1. 行为抽象&#xff1a; 它是指将一段代码抽象为一种功能或行为&#xff0c;以便在需要时可以传递给其他方…

如何训练一个大语言模型(LLMs)

目录 前言大语言模型 Vs机器学习模型训练过程步骤1&#xff1a;数据策划&#xff08;Data Curation)步骤2&#xff1a;格式化与预处理步骤3&#xff1a;训练模型步骤4&#xff1a;模型评估 LLM Leaderboard[LLM Leaderboard 2024](https://www.vellum.ai/llm-leaderboard)[Open…

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

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;12&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第4节 Kappa架构 19.4.2 Kappa架构介绍 Kappa架构由Jay Kreps提出&#xff08;Lambda由Storm之父Nayhan M…

智慧水务是什么样的?如何打造智慧水务大屏?

在信息化和数字化快速发展的今天&#xff0c;智慧水务作为城市供水管理的重要组成部分&#xff0c;正变得越来越重要。智慧水务大屏作为智慧水务系统的可视化核心&#xff0c;不仅提升了水务管理的效率&#xff0c;而且通过数据的实时监控和分析&#xff0c;为决策者提供了强有…

持续发力新能源新材料产业,企企通 ×『瑞翔新材』SRM项目启动,积极推动企业发展新质生产力

近日&#xff0c;南通瑞翔新材料有限公司&#xff08;以下简称“瑞翔新材”&#xff09;与企企通达成战略合作&#xff0c;并成功召开SRM项目启动会&#xff0c;瑞翔新材与企企通高层领导、项目负责人及项目组成员共同出席此次启动会。 本次项目建设&#xff0c;企企通将助力瑞…

微服架构基础设施环境平台搭建 -(六)Kubesphere 部署Redis服务 设置访问Redis密码

微服架构基础设施环境平台搭建 -&#xff08;六&#xff09;Kubesphere 部署Redis服务 & 设置访问Redis密码 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -&#xff08;一&#xff09;基础环境准备 微服架构基础设施环境平台搭建 -&#xff08;二…