⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blinky.c

📁 stm32初级例程
💻 C
字号:
/**************************************************************
**  精英STM32开发板
**  版本:V1.0
**  功能:判断按键是否按下,按下就点亮LED
***************************************************************/


#include <stdio.h>
#include <stm32f10x_lib.h>                        // STM32F10x Library Definitions
#include "STM32_Init.h"                           // STM32 Initialization

//----------------------------------------------------------------------------------------------------- 
//别名区    ADDRESS=0x4200 0000 + (0x0001 100C*0x20) + (bitx*4) ;bitx:第x位 
// 把“位段地址+位序号”转换别名地址宏 
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
//把该地址转换成一个指针 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 

#define BIT_ADDR(addr, bitnum)   MEM_ADDR( BITBAND(addr, bitnum)  ) 

#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C 
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C 
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C 
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C 
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C 

#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808 
#define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08 
#define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008 
#define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408 
#define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808 

//----------------------------------------------------- 
#define PA0   BIT_ADDR(GPIOA_ODR_Addr, 0)  //输出 
#define PA1   BIT_ADDR(GPIOA_ODR_Addr, 1)  //输出 
#define PA2   BIT_ADDR(GPIOA_ODR_Addr, 2)  //输出 
#define PA3   BIT_ADDR(GPIOA_ODR_Addr, 3)  //输出 
#define PA4   BIT_ADDR(GPIOA_ODR_Addr, 4)  //输出 
#define PA5   BIT_ADDR(GPIOA_ODR_Addr, 5)  //输出 
#define PA6   BIT_ADDR(GPIOA_ODR_Addr, 6)  //输出 
#define PA7   BIT_ADDR(GPIOA_ODR_Addr, 7)  //输出 
#define PA8   BIT_ADDR(GPIOA_ODR_Addr, 8)  //输出 
#define PA9   BIT_ADDR(GPIOA_ODR_Addr, 9)  //输出 
#define PA10  BIT_ADDR(GPIOA_ODR_Addr, 10) //输出 
#define PA11  BIT_ADDR(GPIOA_ODR_Addr, 11) //输出 
#define PA12  BIT_ADDR(GPIOA_ODR_Addr, 12) //输出 
#define PA13  BIT_ADDR(GPIOA_ODR_Addr, 13) //输出 
#define PA14  BIT_ADDR(GPIOA_ODR_Addr, 14) //输出 
#define PA15  BIT_ADDR(GPIOA_ODR_Addr, 15) //输出 

#define PA0in   BIT_ADDR(GPIOA_IDR_Addr, 0)  //输入 
#define PA1in   BIT_ADDR(GPIOA_IDR_Addr, 1)  //输入 
#define PA2in   BIT_ADDR(GPIOA_IDR_Addr, 2)  //输入 
#define PA3in   BIT_ADDR(GPIOA_IDR_Addr, 3)  //输入 
#define PA4in   BIT_ADDR(GPIOA_IDR_Addr, 4)  //输入 
#define PA5in   BIT_ADDR(GPIOA_IDR_Addr, 5)  //输入 
#define PA6in   BIT_ADDR(GPIOA_IDR_Addr, 6)  //输入 
#define PA7in   BIT_ADDR(GPIOA_IDR_Addr, 7)  //输入 
#define PA8in   BIT_ADDR(GPIOA_IDR_Addr, 8)  //输入 
#define PA9in   BIT_ADDR(GPIOA_IDR_Addr, 9)  //输入 
#define PA10in  BIT_ADDR(GPIOA_IDR_Addr, 10) //输入 
#define PA11in  BIT_ADDR(GPIOA_IDR_Addr, 11) //输入 
#define PA12in  BIT_ADDR(GPIOA_IDR_Addr, 12) //输入 
#define PA13in  BIT_ADDR(GPIOA_IDR_Addr, 13) //输入 
#define PA14in  BIT_ADDR(GPIOA_IDR_Addr, 14) //输入 
#define PA15in  BIT_ADDR(GPIOA_IDR_Addr, 15) //输入 

//----------------------------------------------------- 
#define PB0   BIT_ADDR(GPIOB_ODR_Addr, 0)  //输出 
#define PB1   BIT_ADDR(GPIOB_ODR_Addr, 1)  //输出 
#define PB2   BIT_ADDR(GPIOB_ODR_Addr, 2)  //输出 
#define PB3   BIT_ADDR(GPIOB_ODR_Addr, 3)  //输出 
#define PB4   BIT_ADDR(GPIOB_ODR_Addr, 4)  //输出 
#define PB5   BIT_ADDR(GPIOB_ODR_Addr, 5)  //输出 
#define PB6   BIT_ADDR(GPIOB_ODR_Addr, 6)  //输出 
#define PB7   BIT_ADDR(GPIOB_ODR_Addr, 7)  //输出 
#define PB8   BIT_ADDR(GPIOB_ODR_Addr, 8)  //输出 
#define PB9   BIT_ADDR(GPIOB_ODR_Addr, 9)  //输出 
#define PB10  BIT_ADDR(GPIOB_ODR_Addr, 10) //输出 
#define PB11  BIT_ADDR(GPIOB_ODR_Addr, 11) //输出 
#define PB12  BIT_ADDR(GPIOB_ODR_Addr, 12) //输出 
#define PB13  BIT_ADDR(GPIOB_ODR_Addr, 13) //输出 
#define PB14  BIT_ADDR(GPIOB_ODR_Addr, 14) //输出 
#define PB15  BIT_ADDR(GPIOB_ODR_Addr, 15) //输出 

#define PB0in   BIT_ADDR(GPIOB_IDR_Addr, 0)  //输入 
#define PB1in   BIT_ADDR(GPIOB_IDR_Addr, 1)  //输入 
#define PB2in   BIT_ADDR(GPIOB_IDR_Addr, 2)  //输入 
#define PB3in   BIT_ADDR(GPIOB_IDR_Addr, 3)  //输入 
#define PB4in   BIT_ADDR(GPIOB_IDR_Addr, 4)  //输入 
#define PB5in   BIT_ADDR(GPIOB_IDR_Addr, 5)  //输入 
#define PB6in   BIT_ADDR(GPIOB_IDR_Addr, 6)  //输入 
#define PB7in   BIT_ADDR(GPIOB_IDR_Addr, 7)  //输入 
#define PB8in   BIT_ADDR(GPIOB_IDR_Addr, 8)  //输入 
#define PB9in   BIT_ADDR(GPIOB_IDR_Addr, 9)  //输入 
#define PB10in  BIT_ADDR(GPIOB_IDR_Addr, 10) //输入 
#define PB11in  BIT_ADDR(GPIOB_IDR_Addr, 11) //输入 
#define PB12in  BIT_ADDR(GPIOB_IDR_Addr, 12) //输入 
#define PB13in  BIT_ADDR(GPIOB_IDR_Addr, 13) //输入 
#define PB14in  BIT_ADDR(GPIOB_IDR_Addr, 14) //输入 
#define PB15in  BIT_ADDR(GPIOB_IDR_Addr, 15) //输入 
//---------------------------------------------------- 
#define PC0   BIT_ADDR(GPIOC_ODR_Addr, 0)  //输出 
#define PC1   BIT_ADDR(GPIOC_ODR_Addr, 1)  //输出 
#define PC2   BIT_ADDR(GPIOC_ODR_Addr, 2)  //输出 
#define PC3   BIT_ADDR(GPIOC_ODR_Addr, 3)  //输出 
#define PC4   BIT_ADDR(GPIOC_ODR_Addr, 4)  //输出 
#define PC5   BIT_ADDR(GPIOC_ODR_Addr, 5)  //输出 
#define PC6   BIT_ADDR(GPIOC_ODR_Addr, 6)  //输出 
#define PC7   BIT_ADDR(GPIOC_ODR_Addr, 7)  //输出 
#define PC8   BIT_ADDR(GPIOC_ODR_Addr, 8)  //输出 
#define PC9   BIT_ADDR(GPIOC_ODR_Addr, 9)  //输出 
#define PC10  BIT_ADDR(GPIOC_ODR_Addr, 10) //输出 
#define PC11  BIT_ADDR(GPIOC_ODR_Addr, 11) //输出 
#define PC12  BIT_ADDR(GPIOC_ODR_Addr, 12) //输出 
#define PC13  BIT_ADDR(GPIOC_ODR_Addr, 13) //输出 
#define PC14  BIT_ADDR(GPIOC_ODR_Addr, 14) //输出 
#define PC15  BIT_ADDR(GPIOC_ODR_Addr, 15) //输出 

#define PC0in   BIT_ADDR(GPIOC_IDR_Addr, 0)  //输入 
#define PC1in   BIT_ADDR(GPIOC_IDR_Addr, 1)  //输入 
#define PC2in   BIT_ADDR(GPIOC_IDR_Addr, 2)  //输入 
#define PC3in   BIT_ADDR(GPIOC_IDR_Addr, 3)  //输入 
#define PC4in   BIT_ADDR(GPIOC_IDR_Addr, 4)  //输入 
#define PC5in   BIT_ADDR(GPIOC_IDR_Addr, 5)  //输入 
#define PC6in   BIT_ADDR(GPIOC_IDR_Addr, 6)  //输入 
#define PC7in   BIT_ADDR(GPIOC_IDR_Addr, 7)  //输入 
#define PC8in   BIT_ADDR(GPIOC_IDR_Addr, 8)  //输入 
#define PC9in   BIT_ADDR(GPIOC_IDR_Addr, 9)  //输入 
#define PC10in  BIT_ADDR(GPIOC_IDR_Addr, 10) //输入 
#define PC11in  BIT_ADDR(GPIOC_IDR_Addr, 11) //输入 
#define PC12in  BIT_ADDR(GPIOC_IDR_Addr, 12) //输入 
#define PC13in  BIT_ADDR(GPIOC_IDR_Addr, 13) //输入 
#define PC14in  BIT_ADDR(GPIOC_IDR_Addr, 14) //输入 
#define PC15in  BIT_ADDR(GPIOC_IDR_Addr, 15) //输入 

//---------------------------------------------------- 
#define PD0   BIT_ADDR(GPIOD_ODR_Addr, 0)  //输出 
#define PD1   BIT_ADDR(GPIOD_ODR_Addr, 1)  //输出 
#define PD2   BIT_ADDR(GPIOD_ODR_Addr, 2)  //输出 
#define PD3   BIT_ADDR(GPIOD_ODR_Addr, 3)  //输出 
#define PD4   BIT_ADDR(GPIOD_ODR_Addr, 4)  //输出 
#define PD5   BIT_ADDR(GPIOD_ODR_Addr, 5)  //输出 
#define PD6   BIT_ADDR(GPIOD_ODR_Addr, 6)  //输出 
#define PD7   BIT_ADDR(GPIOD_ODR_Addr, 7)  //输出 
#define PD8   BIT_ADDR(GPIOD_ODR_Addr, 8)  //输出 
#define PD9   BIT_ADDR(GPIOD_ODR_Addr, 9)  //输出 
#define PD10  BIT_ADDR(GPIOD_ODR_Addr, 10) //输出 
#define PD11  BIT_ADDR(GPIOD_ODR_Addr, 11) //输出 
#define PD12  BIT_ADDR(GPIOD_ODR_Addr, 12) //输出 
#define PD13  BIT_ADDR(GPIOD_ODR_Addr, 13) //输出 
#define PD14  BIT_ADDR(GPIOD_ODR_Addr, 14) //输出 
#define PD15  BIT_ADDR(GPIOD_ODR_Addr, 15) //输出 

#define PD0in   BIT_ADDR(GPIOD_IDR_Addr, 0)  //输入 
#define PD1in   BIT_ADDR(GPIOD_IDR_Addr, 1)  //输入 
#define PD2in   BIT_ADDR(GPIOD_IDR_Addr, 2)  //输入 
#define PD3in   BIT_ADDR(GPIOD_IDR_Addr, 3)  //输入 
#define PD4in   BIT_ADDR(GPIOD_IDR_Addr, 4)  //输入 
#define PD5in   BIT_ADDR(GPIOD_IDR_Addr, 5)  //输入 
#define PD6in   BIT_ADDR(GPIOD_IDR_Addr, 6)  //输入 
#define PD7in   BIT_ADDR(GPIOD_IDR_Addr, 7)  //输入 
#define PD8in   BIT_ADDR(GPIOD_IDR_Addr, 8)  //输入 
#define PD9in   BIT_ADDR(GPIOD_IDR_Addr, 9)  //输入 
#define PD10in  BIT_ADDR(GPIOD_IDR_Addr, 10) //输入 
#define PD11in  BIT_ADDR(GPIOD_IDR_Addr, 11) //输入 
#define PD12in  BIT_ADDR(GPIOD_IDR_Addr, 12) //输入 
#define PD13in  BIT_ADDR(GPIOD_IDR_Addr, 13) //输入 
#define PD14in  BIT_ADDR(GPIOD_IDR_Addr, 14) //输入 
#define PD15in  BIT_ADDR(GPIOD_IDR_Addr, 15) //输入 

//---------------------------------------------------- 
#define PE0   BIT_ADDR(GPIOE_ODR_Addr, 0)  //输出 
#define PE1   BIT_ADDR(GPIOE_ODR_Addr, 1)  //输出 
#define PE2   BIT_ADDR(GPIOE_ODR_Addr, 2)  //输出 
#define PE3   BIT_ADDR(GPIOE_ODR_Addr, 3)  //输出 
#define PE4   BIT_ADDR(GPIOE_ODR_Addr, 4)  //输出 
#define PE5   BIT_ADDR(GPIOE_ODR_Addr, 5)  //输出 
#define PE6   BIT_ADDR(GPIOE_ODR_Addr, 6)  //输出 
#define PE7   BIT_ADDR(GPIOE_ODR_Addr, 7)  //输出 
#define PE8   BIT_ADDR(GPIOE_ODR_Addr, 8)  //输出 
#define PE9   BIT_ADDR(GPIOE_ODR_Addr, 9)  //输出 
#define PE10  BIT_ADDR(GPIOE_ODR_Addr, 10) //输出 
#define PE11  BIT_ADDR(GPIOE_ODR_Addr, 11) //输出 
#define PE12  BIT_ADDR(GPIOE_ODR_Addr, 12) //输出 
#define PE13  BIT_ADDR(GPIOE_ODR_Addr, 13) //输出 
#define PE14  BIT_ADDR(GPIOE_ODR_Addr, 14) //输出 
#define PE15  BIT_ADDR(GPIOE_ODR_Addr, 15) //输出 

#define PE0in   BIT_ADDR(GPIOE_IDR_Addr, 0)  //输入 
#define PE1in   BIT_ADDR(GPIOE_IDR_Addr, 1)  //输入 
#define PE2in   BIT_ADDR(GPIOE_IDR_Addr, 2)  //输入 
#define PE3in   BIT_ADDR(GPIOE_IDR_Addr, 3)  //输入 
#define PE4in   BIT_ADDR(GPIOE_IDR_Addr, 4)  //输入 
#define PE5in   BIT_ADDR(GPIOE_IDR_Addr, 5)  //输入 
#define PE6in   BIT_ADDR(GPIOE_IDR_Addr, 6)  //输入 
#define PE7in   BIT_ADDR(GPIOE_IDR_Addr, 7)  //输入 
#define PE8in   BIT_ADDR(GPIOE_IDR_Addr, 8)  //输入 
#define PE9in   BIT_ADDR(GPIOE_IDR_Addr, 9)  //输入 
#define PE10in  BIT_ADDR(GPIOE_IDR_Addr, 10) //输入 
#define PE11in  BIT_ADDR(GPIOE_IDR_Addr, 11) //输入 
#define PE12in  BIT_ADDR(GPIOE_IDR_Addr, 12) //输入 
#define PE13in  BIT_ADDR(GPIOE_IDR_Addr, 13) //输入 
#define PE14in  BIT_ADDR(GPIOE_IDR_Addr, 14) //输入 
#define PE15in  BIT_ADDR(GPIOE_IDR_Addr, 15) //输入

#define u16  unsigned short
#define u32  unsigned long

//32位数位操作某位
#define BIT32(n)         ( (u32)((u32)1UL<<n) )

//判断某位是否=1,=1返回1,=0返回0
#define	isBit32(dat, n)  ((dat&BIT32(n)) ? 1: 0)//0~31


//软件延时程序,不是精确的延时
void Delay(u32 time)
{u32 i,j;
  
	for(j=0; j<time; j++)
	{
	   for(i=0;i<12000;i++);
	}
}

/*----------------------------------------------------------------------------
  MAIN function
 *----------------------------------------------------------------------------*/
int main (void) 
{
// u32 port;
  
  stm32_Init ();// STM32 初始化
  
  //LED先全灭
  PC0=1;  PC1=1;  PC2=1;
  
  
  //输入设置为1表示上拉,很多人忽略了这点哦
  PE2=0; PE3=0; PE4=0;
  while (1) 
  {              
     //Delay(100);
	   Delay(10);

	   //port=GPIOC->IDR;//读PC端口状态
	   
	   //根据PC0状态点亮/熄灭LED0-PC0
	   if(PE2in==0)
	      PC0=1;
	   else
	      PC0=0;
	   
	   //根据PC1状态点亮/熄灭LED1-PC1
	   if(PE3in==0)
	      PC1=1;
	   else
	      PC1=0;;
	   
	   //根据PC2状态点亮/熄灭LED2-PC2
	   if(PE4in==0)
	      PC2=1;
	   else
	      PC2=0;

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -