• (个人杂记)第六章 跑马灯实验


    IO操作步骤

    1)使能IO口时钟。RCC_APB2PeriphClockCmd()
    2)初始化IO。GPIO_Init()
    3)操作。GPIO_SetBits()设置1GPIO_ResetBits()设置0

    硬件设计

    板子:STM32F103ZET6精英版
    原理图查找LED的IO:LED1(PE5) LED0(PB5)
    在这里插入图片描述
    观察:VCC3.3右边高电平,左边低电平LED才会亮,所以LED=0常亮
    在这里插入图片描述

     //使能PB,PE端口时钟
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
    
    • 1
    • 2
    • 3

    配置外设的时候, 无论如何,都先使能外设的时钟
    (详细介绍可以查别处)推挽输出:可输出高低电平,驱动功耗不大的数字器件,这里是LED灯

    //位带操作
    #define LED0 PBout(5)// PB5
    #define LED1 PEout(5)// PE5	
    
    • 1
    • 2
    • 3

    (开发指南库函数版本5.2.1)位带操作,就是将每个比特膨胀成32位字,访问字也就访问比特效果。

    在这里插入图片描述

    胡乱操作+随便遐想

    • 一个while里面是一个功能,初始化的设置LED为0,初始化后能实现常亮
    /*****************main.c********************/
    int main(void)
     {	
    	delay_init();	    //延时函数初始化	  
    	LED_Init();		  	//初始化与LED连接的硬件接口
    //	while(1)
    //	{
    //		LED0=0;
    //		LED1=1;
    //		delay_ms(300);	 //延时300ms
    //		LED0=1;
    //		LED1=0;
    //		delay_ms(300);	//延时300ms
    //	}
     }
    
    /******************led.c*******************/
    void LED_Init(void)
    {
     
     GPIO_InitTypeDef  GPIO_InitStructure;
     	
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	 //使能PB,PE端口时钟
    	
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 //LED0-->PB.5 端口配置
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
     GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB.5
     GPIO_ResetBits(GPIOB,GPIO_Pin_5);						 //PB.5 输出高
    
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	    		 //LED1-->PE.5 端口配置, 推挽输出
     GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
     GPIO_ResetBits(GPIOE,GPIO_Pin_5); 						 //PE.5 输出高 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 改成开漏输出
      没啥变化,还是可以走马灯,低灯进行控制,两者有区别,估计是没遇到
      通过GPIO_ReadInputDataBit()查看端口电平状态与猜测无疑,就是输出中文老是乱码
    • 使用close和open代替,0和1,毕竟有些情况下,你自己也不知道,1和0哪一个代表亮和灭,会导致粗心错误,采用枚举代替数值进行控制。
    /*********led.h***********/
    enum{
    	OPEN=0, 
    	CLOSE=1
    };
    /***********main.c*************/
    		LED0=OPEN;
    		LED1=OPEN;
    		delay_ms(10000);
    		p = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);
    		printf("B5: %d\r\n",p);
    		delay_ms(10000);
    		e = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_5);
    		printf("E5: %d\r\n",e);
    		LED1=CLOSE;
    		LED0=CLOSE;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    day 49 | 647. 回文子串 ● 516.最长回文子序列
    深入剖析Tomcat之ERR_INVALID_HTTP_RESPONSE
    怎样下载和安装HBuilder软件?【附HBuilder快捷键】
    近端安全互联样例使用指导
    【LeetCode】16. RansomNode·赎金信
    金仓数据库 KingbaseES 插件参考手册(22. dbms_sql)
    双向认证配置
    【conda】解决 An HTTP error occurred when trying to retrieve this URL.问题
    虚拟机独立 IP 配置
    解决selenium加载网页过慢影响程序运行时间的问题
  • 原文地址:https://blog.csdn.net/canola_flowers/article/details/126095499