[STM32F4] STM32F429的GPIO学习

[复制链接]
967|5
 楼主| zhuotuzi 发表于 2017-12-14 11:13 | 显示全部楼层 |阅读模式
ST的cube以难以入门著称,废了老劲了。我把我学习GPIO翻转的过程总结一下
QQ截图20171214102737.png
先不讨论系统初始化时钟的部分。
看看这里会发现,直接使用了开发板的LED命名的函数操作。定位到函数看看是怎么回事
QQ截图20171214102737.png
原来在这里,实际上就是替换了一些,比如时钟使能,这里发现,两个LED的时钟使能替换对象是一样的,因此这里本来可以
一行搞定的,被搞成了重复一次。费劲啊,其实这有个好处,就是如果两个LED不是在一个端口B上,那就有用了。总之这样我觉得不适合初学者
下面的两句用于结构体初始化的LED1_PIN就是直接替换对应的管脚PIN

 楼主| zhuotuzi 发表于 2017-12-14 11:15 | 显示全部楼层
对于定时器的实现,也是很容易,HAL直接提供了该延时函数
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url] This function provides accurate delay (in milliseconds) based
  3.   *        on variable incremented.
  4.   * [url=home.php?mod=space&uid=536309]@NOTE[/url] In the default implementation , SysTick timer is the source of time base.
  5.   *       It is used to generate interrupts at regular time intervals where uwTick
  6.   *       is incremented.
  7.   * @note This function is declared as __weak to be overwritten in case of other
  8.   *       implementations in user file.
  9.   * @param Delay: specifies the delay time length, in milliseconds.
  10.   * @retval None
  11.   */
  12. __weak void HAL_Delay(__IO uint32_t Delay)
  13. {
  14.   uint32_t tickstart = 0U;
  15.   tickstart = HAL_GetTick();
  16.   while((HAL_GetTick() - tickstart) < Delay)
  17.   {
  18.   }
  19. }
参数是微秒级。对于一般的应用足够了
而实现翻转,就是调用了HAL库函数里的翻转指令
  1. void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
  2. {
  3.   /* Check the parameters */
  4.   assert_param(IS_GPIO_PIN(GPIO_Pin));

  5.   GPIOx->ODR ^= GPIO_Pin;
  6. }
位操作运算,异或。
junpeng324 发表于 2017-12-14 11:34 来自手机 | 显示全部楼层
不过还是感谢你分享
xixi2017 发表于 2017-12-15 14:41 | 显示全部楼层
应该有个固定模式的,那些你不明白就是固定模式。
xinpian101 发表于 2017-12-15 19:08 | 显示全部楼层
STM32的IO还是很容易用HAL操作的。
稳稳の幸福 发表于 2017-12-15 20:20 | 显示全部楼层
每一家的库函数都有自己的长处和短处,如果能集结各方长处,避其短,必定会让学习和应用得到长足的进步
您需要登录后才可以回帖 登录 | 注册

本版积分规则

216

主题

3391

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部