打印
[STM32F4]

STM32F429的GPIO学习

[复制链接]
771|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuotuzi|  楼主 | 2017-12-14 11:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ST的cube以难以入门著称,废了老劲了。我把我学习GPIO翻转的过程总结一下

先不讨论系统初始化时钟的部分。
看看这里会发现,直接使用了开发板的LED命名的函数操作。定位到函数看看是怎么回事

原来在这里,实际上就是替换了一些,比如时钟使能,这里发现,两个LED的时钟使能替换对象是一样的,因此这里本来可以
一行搞定的,被搞成了重复一次。费劲啊,其实这有个好处,就是如果两个LED不是在一个端口B上,那就有用了。总之这样我觉得不适合初学者
下面的两句用于结构体初始化的LED1_PIN就是直接替换对应的管脚PIN

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

  GPIOx->ODR ^= GPIO_Pin;
}
位操作运算,异或。

使用特权

评论回复
板凳
junpeng324| | 2017-12-14 11:34 | 只看该作者
不过还是感谢你分享

使用特权

评论回复
地板
xixi2017| | 2017-12-15 14:41 | 只看该作者
应该有个固定模式的,那些你不明白就是固定模式。

使用特权

评论回复
5
xinpian101| | 2017-12-15 19:08 | 只看该作者
STM32的IO还是很容易用HAL操作的。

使用特权

评论回复
6
稳稳の幸福| | 2017-12-15 20:20 | 只看该作者
每一家的库函数都有自己的长处和短处,如果能集结各方长处,避其短,必定会让学习和应用得到长足的进步

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

164

主题

3192

帖子

7

粉丝