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

server/2024/9/23 19:41:06/

详情更多 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.ppmy.cn/server/17957.html

相关文章

Godot3D学习笔记1——界面布局简介

创建完成项目之后可以看到如下界面&#xff1a; Godot引擎也是场景式编程&#xff0c;这里的一个场景相当于一个关卡。 这里我们点击左侧“3D场景”按钮创建一个3D场景&#xff0c;现在在中间的画面中会出现一个球。在左侧节点视图中选中“Node3D”&#xff0c;右键创建子节点…

9【PS作图】像素画Tips

放大缩小 “窗口”-排列-为…画布新建窗口&#xff0c;就可以新建一个窗口&#xff0c;实时看作图效果 如果要保持放大或缩小的像素画仍然保持硬边缘&#xff0c;需要设置两个东西 将 编辑 > 首选项 > 常规 中的 插值方式 改为 “邻近&#xff08;靠近硬边缘&#xff09…

网络安全-态势感知

网络安全态势感知是一种对网络安全性定量分析的一种手段&#xff0c;成已经为网络安全2.0时代安全技术的焦点&#xff0c;对保障网络安全起着非常重要的作用。 为什么需要态势感知 态势感知的概念最早在军事领域被提出&#xff0c;覆盖了感知、理解和预测三个层次。并随着网络…

酷开科技逐步为用户构建健全的智慧家庭生活场景

大规模与精细化人群技术则是通过大量的计算能力和精细化的运营能力&#xff0c;建立用户专属数据储存区域&#xff0c;使得用户在使用不同电视的观影偏好和兴趣能够能够得以延续。 不拘泥于自有品牌终端数量&#xff0c;酷开系统除了集成在创维电视上&#xff0c;还服务于飞利…

python高级进阶(四)[模块、包、异常]

目录 一、模块module 1.1 模块module 1.2 创建模块文件 1.3 导入模块中的gongn 1. 导入整个模块 2. 导入模块中的特定功能 3. 导入模块中的所有功能&#xff08;不推荐&#xff0c;因为可能会导致命名冲突 1.4 模块导入冲突 1. 部分导入冲突 2. 全部导入冲突 1.5 3. 模…

bit、进制、位、时钟(窗口)、OSI七层网络模型、协议、各种码

1.bit与进制 &#xff08;个人理解&#xff0c;具体电路是非常复杂的&#xff09; 物理层数据流&#xff0c;bit表示物理层数据传输单位&#xff0c; 一个电路当中&#xff0c;通过通断来表示数字1和0 两个电路要通讯&#xff0c;至少要两根线&#xff0c;一根作为电势参照…

笔记本电脑耗电和发热比较厉害怎么处理

工作中会遇到有同事反馈笔记本电脑耗电和发热比较厉害&#xff0c;主要检查以下几个地方 1、CPU频率 很多人觉得是cpu使用率高就代表电脑跑得快&#xff0c;发热量就大&#xff0c;其实不是的&#xff0c;主要是看的cpu频率&#xff0c;频率越高&#xff0c;电脑发热量越大。如…

2024年618有哪些数码家电值得入手?全网最省钱攻略指南

作为全年唯一设在夏季的大型电商狂欢节&#xff0c;618一直是很多人购置数码类、家电类的最好时间节点之一。但是问题来了&#xff0c;现在的数码家电行业“鱼龙混杂”&#xff0c;不仅越来越多新品牌涌入市场&#xff0c;而且各个大品牌为了抢占市场&#xff0c;旗下产品的品类…