【STM32F412-DISCO 开发板试用体验】+CubeMX和HAL库实现LED闪烁

  • 开发
  • 泡沫113355
  • LV3工程师
  • |      2017-05-07 13:54:13
  • 浏览量 2100
  • 回复:1
本帖最后由 泡沫113355 于 2017-5-7 12:38 编辑 昨天用ST的标准库在STM32F412-DISCO 开发板上点亮了LED,今天准备用HAL来实现。STM32CUBEMX可以图形化配置STM32的MCU,使用HAL库自动搭建工程并生成初始化代码,方便快捷。 首先打开STM32CUBEMX,建立新工程,出现如下选MCU的界面,通过系列、型号、封装、FLASH容量、SRAM等对芯片进行选择,选择的同时,左侧显示STM23的内部资源,绿色的为该MCU内部有的外设,这里我选择板载的STM32F412ZGTx,LQFP144封装、1024Byte的FLASH,256字节SRAM,114个通用IO。 选型完后就进入图形化配置界面,显示了STM32F412的整块芯片的引脚图,非常直观,黄色的为电源引脚,有内部RTC电源引脚,模拟电源引脚,内部ADC参考电压引脚,还有众多的芯片工作电源VDD/VSS。接下来选择时钟源,在下图左下角的RCC选项总选择高速外部时钟,外部晶振。 然后点击芯片上的IO口,出现对应IO口的几种工作模式,板上的LED连接的PE0-PE3,这里我们将这4个IO都设置为通用输出模式。 需要使用的IO选完后,点击时钟配置,显示的是整个芯片的时钟框图,在HSE输入端设置晶振为8M,将PLL Source MUX选为HSE,然后配置锁相环,将系统时钟源选为PLLCLK,然后配置芯片的各个时钟总线的时钟大小,像SDIO,I2S这些没有使用的外设,这里就无法开启他们的时钟。 接下来在Configuration中对我们使用的外设进行初始化配置,PE0=PE3四个IO都配置为推挽、上拉、最高输出时钟。DMA和中断现在没有使用就不进行配置。 点击左上角的生成按钮,对工程的名字、路径、编译工具、调用的HAL库等进行设置,然后就自动生成我们需要的开发环境下的工程,并对我们使用了的外设、时钟等进行了初始化,生成初始化代码。下图都有解释,这里就不再赘述。 工程生成完毕,用MDK5打开,正如注释所说,HAL_Init();复位了所有外设、FLASH借口和系统滴答定时器。SystemClock_Config();按照我们在CubeMX中的配置将各个与时钟有关的寄存器;MX_GPIO_Init();初始化了我们使用的所有外设,这里的代码初始化的是GPE0-GPE3。while(1)中是空的,还有其他的地方/* USER CODE BEGIN 2 */ /* USER CODE END 2 */留给我们自己添加代码。自己的代码最好添加在这些区域,不然可能在再次用CubeMX更改配置的时候将自己的代码覆盖。 和标准库一样,用库函数来拉低LED的IO口来点亮LED下载之后LED没亮,调试一下,发现程序在等待PLL的时候卡死了,也就是PLL时钟没有准备好,于是我怀疑是PLL的参数可能设置不对,更改了两次,还是老样子。 然后我认为晶振不对,测了一下外部晶振的H0和H1口,没有起振,在看了看板卡,没有那种普通的椭圆状的晶振,但我只用过椭圆的晶振,不知道板子上的晶振到低在哪儿,于是打开原理图,准备看看标号,居然发现Not Fitted,板子上没有接外部晶振?? 于是我将时钟源设置为内部高速时钟,同样的将系统时钟设置为100M,再次下载程序,四颗LED都亮了,为了验证系统时钟到底对不对,我将正点原子的延时函数移植进来,准备写一个LED延时闪烁。编译下载,LED确实是在闪烁。 用示波器看了一下IO反转时间,差不多是470ms,30ms的误差,将就吧,后面有时间再来调了。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
听雨落凡尘 1天前
顶帖
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子