单片机
返回首页

STM32F4的IO设置测试

2016-12-18 来源:eefocus

环境:

主机:WIN7

开发环境:MDK4.72

MCU:STM32F407VGT6


说明:

目标板上有一个LED,有一个按键,按键实现LED状态翻转.


LED:PE2,低电平亮,高电平灯灭

按键:PC13,低电平按下,高电平松开


源代码:

main.c


  1. /********************************************************************* 

  2. *                             主文件 

  3. *                       (c)copyright 2014,jdh 

  4. *                         All Right Reserved 

  5. *新建日期:2014/3/25 by jdh 

  6. **********************************************************************/  

  7.   

  8. /********************************************************************* 

  9. *                           头文件 

  10. **********************************************************************/  

  11.   

  12. #include 'main.h'  

  13. #include 'stm32f4xx_rcc.h'  

  14. #include 'stm32f4xx_gpio.h'  

  15.   

  16. /********************************************************************* 

  17. *                           全局变量 

  18. **********************************************************************/  

  19.   

  20. static __IO uint32_t TimingDelay;  

  21.   

  22. /********************************************************************* 

  23. *                           函数定义 

  24. **********************************************************************/  

  25.   

  26. void Delay(__IO uint32_t nTime);  

  27.   

  28.   

  29. /********************************************************************* 

  30. *                           函数 

  31. **********************************************************************/  

  32.   

  33. int main(void)  

  34. {  

  35.     //定义IO初始化结构体  

  36.     GPIO_InitTypeDef GPIO_InitStructure;  

  37.       

  38.     //系统时钟:1ms滴答1次  

  39.     if (SysTick_Config(SystemCoreClock / 1000))  

  40.     {   

  41.         while (1);  

  42.     }  

  43.     

  44.     //设置LED的IO口  

  45.     //初始化时钟  

  46.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);  

  47.     //管脚模式:输出口  

  48.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;     

  49.     //类型:推挽模式  

  50.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    

  51.     //上拉下拉设置:不使能  

  52.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      

  53.     //IO口速度  

  54.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  

  55.     //管脚指定  

  56.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  

  57.     //初始化  

  58.     GPIO_Init(GPIOE, &GPIO_InitStructure);  

  59.       

  60.     //设置按键的IO口  

  61.     //初始化时钟  

  62.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);  

  63.     //管脚模式:输出口  

  64.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;      

  65.     //类型:推挽模式  

  66.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    

  67.     //上拉下拉设置:不使能  

  68.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      

  69.     //IO口速度  

  70.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  

  71.     //管脚指定  

  72.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;  

  73.     //初始化  

  74.     GPIO_Init(GPIOC, &GPIO_InitStructure);  

  75.   

  76.     while (1)  

  77.     {  

  78.         //GPIO_SetBits(GPIOE,GPIO_Pin_2);  

  79.         //Delay(500);  

  80.         //GPIO_ResetBits(GPIOE,GPIO_Pin_2);  

  81.         //Delay(500);  

  82.         //按键检测  

  83.         if (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0)  

  84.         {  

  85.             GPIO_ToggleBits(GPIOE,GPIO_Pin_2);  

  86.             Delay(500);  

  87.         }  

  88.     }  

  89. }  

  90.   

  91. /** 

  92.   * @brief  Inserts a delay time. 

  93.   * @param  nTime: specifies the delay time length, in milliseconds. 

  94.   * @retval None 

  95.   */  

  96. void Delay(__IO uint32_t nTime)  

  97. {   

  98.   TimingDelay = nTime;  

  99.   

  100.   while(TimingDelay != 0);  

  101. }  

  102.   

  103. /** 

  104.   * @brief  Decrements the TimingDelay variable. 

  105.   * @param  None 

  106.   * @retval None 

  107.   */  

  108. void TimingDelay_Decrement(void)  

  109. {  

  110.   if (TimingDelay != 0x00)  

  111.   {   

  112.     TimingDelay--;  

  113.   }  

  114. }  

  115.   

  116. #ifdef  USE_FULL_ASSERT  

  117.   

  118. /** 

  119.   * @brief  Reports the name of the source file and the source line number 

  120.   *         where the assert_param error has occurred. 

  121.   * @param  file: pointer to the source file name 

  122.   * @param  line: assert_param error line source number 

  123.   * @retval None 

  124.   */  

  125. void assert_failed(uint8_t* file, uint32_t line)  

  126. {   

  127.   /* User can add his own implementation to report the file name and line number, 

  128.      ex: printf('Wrong parameters value: file %s on line %d\r\n', file, line) */  

  129.   

  130.   /* Infinite loop */  

  131.   while (1)  

  132.   {  

  133.   }  

  134. }  

  135. #endif  

  136.   

  137. /** 

  138.   * @} 

  139.   */   

  140.   

  141. /** 

  142.   * @} 

  143.   */   

  144.   

  145. /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/  




进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章