stm32学习笔记(一) GPIO

战舰开发板的程序
main函数
 int main(void)
 {	
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  	//初始化与led连接的硬件配置
	while(1)
	{
		 LED0=1;
		LED1=1;
		delay_ms(300);	 
		LED0=0;
		LED1=0;
		delay_ms(300);	
	}
 }
delay_init();函数	
void delay_init()    
{

#ifdef OS_CRITICAL_METHOD     //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
    u32 reload;
#endif
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);    //选择外部时钟  HCLK/8
    fac_us=SystemCoreClock/8000000;    //为系统时钟的1/8  
    
#ifdef OS_CRITICAL_METHOD     //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
    reload=SystemCoreClock/8000000;        //每秒钟的计数次数 单位为K       
    reload*=1000000/OS_TICKS_PER_SEC;//根据OS_TICKS_PER_SEC设定溢出时间
                            //reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右    
    fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延时的最少单位       
    SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;       //开启SYSTICK中断
    SysTick->LOAD=reload;     //每1/OS_TICKS_PER_SEC秒中断一次    
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;       //开启SYSTICK    
#else
    fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数   
#endif
}                                    
要修改io的步骤
#define LED0 PDout(4)// 改为相应的Px(x)
Px(x)的宏定义


#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入


  GPIO_InitTypeDef  GPIO_InitStructure;      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIODE, 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_SetBits(GPIOD,GPIO_Pin_5);                         //PB.5 输出高 GPIO_InitStructure.GPIO_Pin
 = GPIO_Pin_5;                 //LED1-->PE.5 端口配置, 推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure);                       //推挽输出 ,IO口速度为50MHz

 GPIO_SetBits(GPIOE,GPIO_Pin_5);                          //PE.5 输出高

如果要改成PD4和PD5 需要修改

1.#define LED0 PDout(4)// 改为相应的Px(x)
2.#define LED1 PDout(5)// 改为相应的Px(x)
3. GPIO_InitTypeDef  GPIO_InitStructure;
     
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);     //使能PD端口时钟
    
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                 //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度为50MHz
 GPIO_Init(GPIOD, &GPIO_InitStructure);                     //根据设定参数初始化GPIOB.5
 GPIO_SetBits(GPIOD,GPIO_Pin_4);                         //PB.5 输出高

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                 //LED1-->PE.5 端口配置, 推挽输出
 GPIO_Init(GPIOD, &GPIO_InitStructure);                       //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOD,GPIO_Pin_5);       


OK! 有arm一闪一闪亮晶晶去。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值