STM32CubeMX实战教程(一) |
您所在的位置:网站首页 › 开发板使用教程雷达怎么用 › STM32CubeMX实战教程(一) |
软件入门
前言新建工程界面简介MCU外设配置时钟树工程设置工具生成代码代码分析main.cgpio.cstm32f4xx_it.c
程序下载现象
结语
前言
STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。平台包括了STM32Cube 硬件抽象层(一个STM32抽象层嵌入式软件,确保在STM32系列最大化的便携性)和一套的中间件组件(RTOS, USB, FatFs, TCP/IP, Graphics, 等等). 直观的STM32微控制器的选择和时钟树配置 微控制器图形化配置外围设备和中间件的功能模式和初始化参数C代码生成项目覆盖STM32微控制器的初始化符合IAR™,Keil™和GCC编译器。对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。本系列教程就将以STM32F407ZGT6为例介绍STM32单片机基于STM32CubeMX的开发方法,所用开发板为正点原子的探索者如果发现什么问题,欢迎指正 新建工程首先,打开STM32CubeMX,第一次使用的朋友可以点击右侧的CHECK FOR UPDATE和INSTALL/REMOVE检查一下软件更新并且找到对应芯片的固件库然后下载,软件和固件库都推荐是使用最新版的,这里不多介绍。 新建工程完毕后将弹出这个界面,下面我将简单介绍一下其中的主要功能。 首先是这中间这块芯片,其中有所有引脚的映射,用鼠标左右键点击某一引脚可以直接对其进行配置,一般在引脚用作普通IO或者将引脚的其他功能映射至非默认引脚时需要对引脚直接操作。 外设配置左边这一栏是外设配置栏,所有内核有关,数模转换有关或是其他外设配置的初始化都在其中进行设置,包括一些第三方组件和实时操作系统的移植都可以在其中完成,还是非常方便的。这里我们设置一下RCC时钟源,高低速时钟源都由外部晶振产生。 上面一栏的第二个选项便是时钟树的配置图,可以直接选择各个节点的分频系数来得到外设的时钟频率;甚至可以直接在相应外设的时钟输出端,也就是最后一项里面输入频率,系统会自动计算出节点的分频系数,不过可能因为目前的算法不够完善,总是会卡住,所以不推荐。*当然,在此之前要先在外设配置的RCC配置里面把时钟源设置一下。*因为现在不需要功能实现,就先不具体设置。 上面一栏的第三个选项是工程设置的选项,这里一般在新建工程后首先配置,因为一般不变,而且容易忽略。这里介绍几个一般配置的点,其他地方基本可以不用关注。 左侧的第二个选项也需要稍微配置一下,这里勾选一下,也就是将每一个外设都新建一个专门的 .c 和 .h 文件。其他默认就行。 最后一个工具选项里面可以进行功耗计算,不常用,这里不必理会。 一切都设置好之后就可以点击右上角的GENERATE CODE生成初始化代码了。生成后可以直接点击open project或者找到路径下的工程文件打开。这里可能会出现一个小坑,就是当我们打开生成的MDK工程的时候可能会由于器件型号不太明确,需要我们手动选择对应的那个型号 到这里,前期的初始化工作已经全部完成了,可以先战术性喝杯水,偷个懒什么的,但是这里我想跟大家简单分析一下STM32CubeMX到底帮我们写了什么代码。 main.c void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = 16; RCC_OscInitStruct.PLL.PLLN = 192; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) { Error_Handler(); } }首先来看到main.c里面,主要是这个RCC的配置,也就是我们刚刚对时钟的操作已经全都变成代码写进来了。而main函数里面也已经帮我们做好相关外设的初始化了。另外,很容易发现这里有大量的USER CODE BEGIN和USER CODE END字样,其实这是非常重要的,也就是STM32CubeMX给用户预留出来的编程地方,当我们在STM32CubeMX里面进行调整并重新生成代码后,在这两行之间的代码会被保留,而用户在其他地方作出的修改则一律被删除,所以这里是不允许在这之外的地方进行编程或是修改的。 gpio.c
这是一个中断的初始化文件,因为没有进行中断设置,所以就没有进行初始化,但是里面有很多回调函数,这是HAL库和标准库开发不同的一个地方,当然在后面的中断教程里会详细说到。 程序下载大致分析完代码之后来看看程序的下载方法,其实和其他开发方式的下载方法是一样的,我这里用的是ST_Link软件内部下载,不需要全片擦除,所以非常快。在option for target中设置好下载器和flash型号就能用,点击download或快捷键F8即可下载。 空的工程当然也就没有具体现象了 结语这次的工程太简单,就不发了,以后的教程中会附上工程源码~ 非常感谢大家的阅读,如有不当或者错误的地方,欢迎指正,谢谢支持。 奥里给~ |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |