stm32学习笔记(一) GPIO

发布者:泉地水无痕最新更新时间:2022-04-17 来源: eefocus关键字: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一闪一闪亮晶晶去。。。。。

关键字:stm32  学习笔记  GPIO 引用地址:stm32学习笔记(一) GPIO

上一篇:keil_提示出错 cannot load flash programming algorithm !
下一篇:为什么STM32的Flash地址要设置到0x08000000

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved