RTThread与CubeMX – (1)初识CubeMX


手上有一块很早之前申请的STM32F767ZI Nucelo开发板,一直放在那里吃灰。这块板子上的F7是STM32系列比较高端的型号,自带2M Flash和512K的RAM,可以跑到216MHz。ST逐渐将开发库从以前的标准准转换到了HAL库,之后的高端型号更是只提供了HAL库,没有标准库。这块板子上的F7就只能用HAL库来开发。我这个只用过标准库的老古董也要开始学习HAL库了。我想既然都用HAL库了,何不一步到位把CubeMX也用上。ST出了一个图形化的配置工具CubeMX,这个CubeMX可以用图形化的方式配置芯片各功能,并且能够检测配置冲突,对于功能复杂引脚多的芯片,图形化配置很方便。这个工具还能根据配置生成报告,适合拿来做成报告的内容。

CubeMX对官方的开发板进行了预定义,可以直接选开发板,选好之后会对板上的功能进行预初始化,比如引脚别名之类的。

对于起了别名没有配置功能的引脚,会显示成橙黄色,对于改了名字配置了功能的引脚会显示为绿色。

CubeMX中可以批量修改引脚的描述,CubeMX会根据描述生成相应的宏定义。在代码中直接使用宏定义的别名。

#define LD3_Pin GPIO_PIN_14
#define LD3_GPIO_Port GPIOB
#define STLK_RX_Pin GPIO_PIN_8
#define STLK_RX_GPIO_Port GPIOD
#define STLK_TX_Pin GPIO_PIN_9
#define STLK_TX_GPIO_Port GPIOD
#define USB_PowerSwitchOn_Pin GPIO_PIN_6
#define USB_PowerSwitchOn_GPIO_Port GPIOG
#define USB_OverCurrent_Pin GPIO_PIN_7
#define USB_OverCurrent_GPIO_Port GPIOG

在CubeMX中可以方便的查看时钟树,能够看到各种模块的时钟配置和使能情况。

以前用标准库的时候,为了确定某一个模块的DMA通道值,需要查看手册。在CubeMX中,可以在模块配置对话框中的DMA配置页面,看到此模块对应的DMA通道,不用查手册就能配置好DMA。

这块Nucleo板上有一个STlink,stlink集成了调试器,USB串口和U盘功能。USB串口与M7的USART3相连,可以为后续移植的rtthread提供finsh功能。因此这里我只配置了IO和UART3,。生的的代码初始化的工作已经做得差不多了,只需要再添加少量的代码就可以工作了。

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

/* USER CODE BEGIN 3 */
  GPIOB->BSRR = LD2_Pin;
  GPIOB->BSRR = LD3_Pin<<16;
  HAL_Delay(50);
  GPIOB->BSRR = LD2_Pin<<16;
  GPIOB->BSRR = LD3_Pin;
  HAL_Delay(50);
}
/* USER CODE END 3 */

一个闪灯的功能就完成了。