你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

开启CUBEMX与NUCLEO-L476RG之旅---CUBE初接触-NUCLEO-L476RG-SysTick点灯

[复制链接]
提问时间:2015-11-16 15:46 /
     前缀:     之前一直在使用标准库开发F0与F1,收到NUCLEO-L476RG之后,看到好像没有了标准库的支持了,顿时头就大了。因为鹰文不好,每次为了一些小细节查参数,都要很吃力的逐句翻译,挺怕的~~~~前些天F0用到了多个定时器,发现TIM14设置的参数不起作用了,找了2天的错误都找不到。单独测试定时器程序,都是正常运行的,可是加到一个程序中,就运行不正常了。于是~~里又想试试CUBE产生初始代码,用HAL库开发。虽然之前安装了几遍CUBE,又卸载了几遍,虽然一看因鹰文资料头就大~~~还是要逐渐的转到HAL来开发~~~~这里真的希望STM中国尽快将HAL库使用的中文说明翻译出来~~~~~~~~~~~~~

     首先说明这个系列的帖子是给像我一样不太熟悉鹰文的人并且学的半斤八两的人的一个参考,也欢迎老鸟门和英文高手来指导指导错误哦。


     下面开始:
      CUBE是ST公司新出的代码初始化软件,可以非常方便快速的配置IO和各种外设,使用也非常方便。今天我们利用系统SysTick定时器和系统里自带的延时函数来使用户LED灯精确的每隔1秒闪烁一次,相对比较简单,首先新建项目,就会跳出选型界面,如下:
1.JPG
这里我们如上图一样选择Board Selectore→NUCLEO64→STML4,并在小窗口中选择→NUCLEO64并在小窗口中选择RG,点OK。进入编辑界面:
2.JPG
因为今天我们只要用到用户LED的IO(查Nucleo板用户手册,我们知道PA5控制着LD2--即用户LED,如下图),所以我只要配置上图中的PA5。

3.JPG

配置起来也很简单,只要在Pinout窗口中左键单击PA5,然后在弹出菜单中选择GPIO_Output就好,如下图

5.JPG

接下来具体配置IO的参数。在Configuration窗口,点击右侧GPIO选项,跳出配置界面,按下图配置:
4.JPG

那么今天用到的基本就配置完了,但是还有一个最重要的我们没有配置,那就是系统时钟。这里因为NUCLEO-L476RG板子没有焊接外部晶振,我们只能使用内部晶振,选择高速的HSI,就好了,还可以改变系统运行速度,如下图:
6.JPG

到此就全配置好了。接着我们生成初始代码,点击Project→ Generate Code,弹出保存对话框,按下图填写:
7.JPG

少许等待后,就自动生成了代码。这里我们需要LED每隔1秒闪烁1次,我们利用系统SysTick定时器和系统里自带的延时函数来编程。我们打开stm32l4xx_hal.c,找到如下代码:
/**
  * @brief Provide accurate delay (in milliseconds) based on variable incremented.
  * @note 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(uint32_t Delay)
{
  uint32_t tickstart = 0;
  tickstart = HAL_GetTick();
  while((HAL_GetTick() - tickstart) < Delay)
  {
  }
}


上面的大概说明,是说这个延时函数的延时时间是MS,就是说我们要延时一秒,就要1000次。我们填写如下:HAL_Delay(1000);

另外在主函数中我们加入如下代码:
  /* USER CODE BEGIN 2 */
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);    //让LED灯亮起来
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);            //让LED灯翻转
        HAL_Delay(1000);                                                   //延时1秒
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}


我们将工程编译后下载到NUCLEO-L476RG板中,发现LED灯按照我们预先的设定,精确的每隔一秒闪烁一次。下面附上代码 SysTick点灯.zip (8.25 MB, 下载次数: 15)
6.JPG

评分

参与人数 1 ST金币 +20 收起 理由
沐紫 + 20

查看全部评分

收藏 2 评论4 发布时间:2015-11-16 15:46

举报

4个回答
沐紫 回答时间:2015-11-16 16:02:35
谢谢祥哥
回答时间:2015-11-16 16:07:14

我其实也是边学边写,后续慢慢来~~
埃斯提爱慕 回答时间:2015-11-16 18:49:38
提示: 作者被禁止或删除 内容自动屏蔽
奋斗逼 回答时间:2015-11-16 20:56:20
赞一个      

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版