stm32f103ze用一段c语言代码实现按键控制流水灯状态

按键一控制正向流水灯(按一下动一下) 按键二控制反向流水灯(按一下动一下) 按键三控制流水灯的数量(1-3个)

  • 这篇博客: STM32F103C8T6实现流水灯中的 三、C语言实现流水灯 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 创建项目
      在这里插入图片描述
      在这里插入图片描述

    2. 选择STM32F103C8开发板
      在这里插入图片描述

      • 创建项目出现弹窗,不勾选setup项,只勾选core项
        在这里插入图片描述
    3. 在output里选择create hex file
      在这里插入图片描述
      在这里插入图片描述

    4. source group里创建led.c,并写入代码,注意项目结构,使用的引脚是PA7,PB9,PC15

    //--------------APB2???????------------------------
    #define RCC_AP2ENR	*((unsigned volatile int*)0x40021018)
    	//----------------GPIOA????? ------------------------
    #define GPIOA_CRL	*((unsigned volatile int*)0x40010800)
    #define	GPIOA_ORD	*((unsigned volatile int*)0x4001080C)
    //----------------GPIOB????? ------------------------
    #define GPIOB_CRH	*((unsigned volatile int*)0x40010C04)
    #define	GPIOB_ORD	*((unsigned volatile int*)0x40010C0C)
    //----------------GPIOC????? ------------------------
    #define GPIOC_CRH	*((unsigned volatile int*)0x40011004)
    #define	GPIOC_ORD	*((unsigned volatile int*)0x4001100C)
    //-------------------???????-----------------------
    void  Delay_wxc( volatile  unsigned  int  t)
    {
         unsigned  int  i;
         while(t--)
             for (i=0;i<800;i++);
    }
    //------------------------???--------------------------
    int main()
    {
    	int j=100;
    	RCC_AP2ENR|=1<<2;			//APB2-GPIOA??????
    	RCC_AP2ENR|=1<<3;			//APB2-GPIOB??????	
    	RCC_AP2ENR|=1<<4;			//APB2-GPIOC??????
    	//????????? RCC_APB2ENR|=1<<3|1<<4;
    	GPIOA_CRL&=0x0FFFFFFF;		//??? ??	
    	GPIOA_CRL|=0x20000000;		//PA7????
    	GPIOA_ORD|=1<<7;			//???????
    	
    	GPIOB_CRH&=0xFFFFFF0F;		//??? ??	
    	GPIOB_CRH|=0x00000020;		//PB9????
    	GPIOB_ORD|=1<<9;			//???????
    	
    	GPIOC_CRH&=0x0FFFFFFF;		//??? ??
    	GPIOC_CRH|=0x30000000;   	//PC15????
    	GPIOC_ORD|=0x1<<15;			//???????	
    	while(j)
    	{	
    		GPIOA_ORD=0x0<<0;		//PB0???	
    		Delay_wxc(1000000);
    		GPIOA_ORD=0x1<<0;		//PB0???
    		Delay_wxc(1000000);
    		
    		GPIOB_ORD=0x0<<9;		//PB9???	
    		Delay_wxc(1000000);
    		GPIOB_ORD=0x1<<9;		//PB9???
    		Delay_wxc(1000000);
    		
    		GPIOC_ORD=0x0<<15;		//PC15???	
    		Delay_wxc(1000000);
    		GPIOC_ORD=0x1<<15;		//PC15???
    		Delay_wxc(1000000);
    	}
    }
    

    在这里插入图片描述

    • 添加驱动文件
      在这里插入图片描述
      在这里插入图片描述
    • 右击文件夹,选择Add Existing Files to Group Source Group 1
      在这里插入图片描述
    • 选择All FIles,选择刚刚添加的启动文件,Add,Add之后Close
      在这里插入图片描述
      在这里插入图片描述
    1. 线路连接
    • 对于USB转TTL模块和stm32f103c8t6连接
      在这里插入图片描述
      在这里插入图片描述
    • 线路图
      请添加图片描述
    1. 烧录。在build之后会在object文件夹下有对应的hex文件生成
    • 生成hex文件
      在这里插入图片描述
      在这里插入图片描述
    • 使用驱动进行烧录操作
    • 连接到电脑,打开mcuisp,上传HEX文件到stm32f103c8t6上:
      在这里插入图片描述
      在这里插入图片描述
    1. 开始编译后的下载成功的提示如下
      在这里插入图片描述
    2. 结果
      在这里插入图片描述