sSTM32Cube IDE 安装与使用
关于STM32Cube IDE
大家基本都用MDK和IAR做开发,大部分应该都是盗版的。 除了这些盗版IDE集成开发环境,其实我们还有另外一种选择,就是基于gcc开发。 但是一说到linux,只做过单片机的朋友就退却了,认为很麻烦,很难学。 其实这不正是从单片机到学linux的一个好过渡吗? 为了解决盗版问题,ST和NXP都推出了基于Eclipse+GCC的集成开发环境。 NXP的叫MCUXpresso IDE。 ST的就是STM32Cube IDE。 使用芯片厂家的IDE比自己用Eclipse+GCC搭建的环境方便。 例如ST的,就将STM32CubeMX集成在一起。 现在我们一起看看ST这个IDE怎么用。
安装
无脑默认安装即可。
建立工程
启动后进入主界面,左边有两个蓝色方形,上面的是创建工程,下面是导入工程。
点击创建工程,弹出芯片选择界面,这里我们选择H750VB 确定后,弹出工程配置界面,在本界面可以设置工程名称、工程保存路径。 编程用C语言。 目标文件类型是可执行文件而不是静态库。 工程类型选择STM32Cube。 确定后弹出Cube界面,这时工程左边只有一个.ioc文件, 在任何时候可以通过双击这个文件弹出stm32Cube界面。 在界面内可以配置管脚功能,左键点击对应管脚,弹出这个管脚可配置的功能,选择要用的功能即可。 如图,我们配置了SW调试口、串口4、QSPI BANK1。 QSPI是一个完整的接口,所以是绿色。串口只使用了TX和RX,是黄色的。 然后点击菜单Project中的Generate Code生成代码。 注意: IDE是新装的,第一次生成代码的时候报错。根据错误进行update设置更新后,问题解决。 生成的工程文件如下:
.project是IDE工程文件 *.ioc是Cube工程,随时可以双击本文件打开Cube配置界面 *.ld是GCC编译环境的工程链接文件 Src文件夹是用户代码,main.c就放在里面 Drivers是库文件,包含HAL库和CMSIS代码 Startup是启动代码
我们看下工程文件
先看下main.c生成的main函数
xint main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_QUADSPI_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
main函数中调用MX_QUADSPI_Init();函数初始化QSPI,生成QSPI初始化函数跟什么有关呢? 用Cube配置相关。我们再打开Cube的配置界面。 芯片图左边有一栏设备栏,Cube配置外设就是通过这里配置。 点击Connectivity, 里面是接口,点击QUADSPI,弹出配置窗口。 上部是接口模式配置,我们是用QSPI BANK1,这个是PIN配置好之后的默认配置,不需要修改。 下面是IO口配置,这里有个问题,网上很多人问QSPI跑不了高速度,原因就是IO口默认速度是LOW,我们要把它改为高。
时钟配置
时钟配置主要3点
- 配置管脚为时钟。
- 配置RCC设备,选用外部使用。
- 时钟树配置。 上图是管脚和RCC配置,我们选用外部时钟,就要将对应管脚设置为时钟输入。 并且在RCC模式中选择外部时钟。 打开时钟配置,当前是默认内部时钟的配置,我们使用外部时钟,跑400M,所有要重新配置。 时钟配置中选择分频的输入框不是很好操作,请点击选择框的左边,再把鼠标往下拖,就可以选择对应分频了。 但是软件其实可以自动计算分频。 我们只需要: 1 红框1选择HSE作为时钟原。 2 红框2选择PLL做为时钟。 3 红框3在时钟中填入400,回车确认。Cube就会自动计算时钟树的分频和倍频。 4 时钟树会出现红色警告,人工调整。 5 QSPI时钟在最下面,选择HCK3=200M作为QSPI时钟源,在QSPI配置中我们设置了2分频,那么QSPI的时钟就是100MHz。
所有配置完成后记得重新生成代码额。
串口外设配置
串口没有变为绿色,我们看看串口变绿色是怎么配置。 点击设备UART4,模式选择同步模式,PIN脚就变绿色了。 配置框下部分是串口各种参数配置。
重新生成代码,查看main函数,可见已经增加了串口4初始化函数。 如果在配置串口时,NVIC Settings勾了Enabled,那么在stm32h7xx_it.c文件中就会有以下串口中断
xxxxxxxxxx
/**
* @brief This function handles UART4 global interrupt.
*/
void UART4_IRQHandler(void)
{
/* USER CODE BEGIN UART4_IRQn 0 */
/* USER CODE END UART4_IRQn 0 */
HAL_UART_IRQHandler(&huart4);
/* USER CODE BEGIN UART4_IRQn 1 */
/* USER CODE END UART4_IRQn 1 */
}
程序编译
点击Project中的Build Project菜单进行编译,编译过程和结果在IDE下部,如下图: 输出的信息都是GCC格式的,跟MDK不一样。 从中我们可以可导出使用的编译工具链名称是arm-none-eabi-gcc。
版本
大家要注意,程序默认编译的是debug版本。
在工程中也只是生成了Debug版本的文件:
.elf是编译得到的程序文件,可以通过gcc工具转换为hex文件。 .map是编译后代码和变量信息,跟MDK一样。 makefile是gcc组织编译的文件,此处的makefile是最顶层的。 .mk也是makefile文件 关于gcc,关于makefile,可能需要一本书才可以说明白
END
2020-03-22