一:由于平时我使用的编译环境是keil,接下来我和大家分享一下使用该编译环境来开发。建立工程使用stm32cube mx软件,可以快速地建立板载的底层驱动函数。
一:keil5 mdk下载连接:https://www.keil.com/download/product/
1.1 选择 MDK-arm ,这里可以根据自身的需求,下载所需要的版本
1.2 在弹出的界面需要填写信息,这里我们可以任意填写,填写完毕后,直接提交就可以了。
这里我们随便填写以下信息就可以,然后再弹出的界面,直接下载keil5的安装包就可以,现在目前最新的版本是5.41,但是我电脑上面安装的程序版本是5.38a,也是不影响使用的,
下载之后,直接一键安装就可以,建议将其安装再C盘,默认安装就可以,这里就不做解释了。
最后,安装完成之后,由于keil5 mdk本身是需要收费的,但是个人学习使用的话,我们使用注册机进行注册就可以了。
二:STM32cube Mx软件的安装过程
STM32CubeMX作为一种图形化工具,可以用于配置任何STM32器件。这款简单易用的图形用户界面为Cortex-M内核生成初始化C代码,并为Cortex-A内核生成Linux器件树。
第一步包括选择与所需外设集匹配的意法半导体STM32微控制器、微处理器或开发平台,同时包括在特定开发平台上运行的示例。
对于微处理器,第二步允许配置GPIO和设置整个系统的时钟,并交互地将外设分配给Arm® Cortex®-M或Cortex®-A内核。特定实用工具(如DDR配置和微调)增强了STM32微处理器的易用性。对于Cortex®-M内核,配置包含了额外步骤,与微控制器的十分相似。
对于微控制器和微处理器Arm® Cortex®-M,第二步为通过引脚分配冲突处理器、时钟树设置助手、功耗计算器,以及用于配置外设(如GPIO或USART)和中间件栈(如USB或TCP/IP)的实用工具来配置各个必需的嵌入式软件。
借助增强型STM32Cube扩展包,可扩展默认软件和中间件栈。可直接通过STM32CubeMX中可用的专用包管理器,直接下载意法半导体或意法半导体合作伙伴提供的软件包,其他软件包可以从本地驱动器进行安装。
此外,STM32CubeMX中的独特实用程序STM32PackCreator可帮助开发人员构建自己的增强型STM32Cube扩展包。
最终,用户可以生成与所选配置匹配的软件包。这一步提供Arm® Cortex®-M初始化C代码(可随时用于多个开发环境),或面向Arm® Cortex®-A的部分Linux®设备树。
STM32CubeMX在STM32Cube中交付。
我们需要再STM32 的生态社区下载软件
连接如下https://www.st.com.cn/zh/development-tools/stm32cubemx.html#st-get-software
这里ST给大家提供三种不同的环境的软件,根据自己的需求下载就可以了。
三:STM32CubeProgrammer 软件的使用
STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具
它提供了一个易用高效的环境,通过调试接口(JTAG和SWD)和自举程序接口(UART、USB DFU、I2C、SPI和CAN)读取、写入及验证器件内存。
STM32CubeProgrammer的功能广泛,可以对STM32内部存储器(如Flash、RAM和OTP)以及外部存储器进行编程。
STM32CubeProgrammer还允许选择编程和上传、编程内容验证以及通过脚本自动编程。
STM32CubeProgrammer提供了GUI(图形用户界面)和CLI(命令行界面)版本。
这里我们主要是为了使用该软件升级一下,板载的ST-link 2.1的内部版本。
四:STM32 cube 软件建立基本工程
使用STM32CUBEMX软件;总体来说官方提供的图形化配置工具,非常的好用。可以完成基本的芯片外设的配置,比如:GPIO的设置,硬件IIC配置,硬件的SPI配置,ADC、DAC、UART、TIM、PWM配置等等,总之你想要底层驱动部分,在这个软件上面自动生成。
自己平时使用的库函数比较多,用hal库比较少一些,不过多用几次发现,开发软件起来还是比较方便的。
4.1 查看一下开发板的原理图:
这里看到我们看到使用的板载的LED灯使用的是 PA5。
这里我使用的软件版本为:6.13.0,目前是最新的版本,在本次活动中,也是基于该版本下完成底层的驱动开发配置。
打开软件如下图所示,首先要进入芯片的选择界面,值得注意的是,配置软件时不时的会完善一些芯片资料或者驱动代码部分,所以长时间不使用的话,也是需要登录一下更新软件的。
在软件屏的左上角的输入框内,输入:STM32F103RBT6,右侧会弹出选择的芯片,(注意:在该界面下,我们在右侧的可以快速的查看芯片的资料),然后我们点击“start project”
如上图所示:STM32 cube MX中会把所有的IO口引脚标识出来,而且除电源VCC,GND引脚,BOOT0引脚,复位引脚NRST外,所有的引脚都是灰色的,在默认状态下IO口都没有被配置和使用。
对于我这种第一次使用该软件时候,真的是无从下手,配置这个软件可能有些困难,需要注意的是,在配置的时候为了避免忘记打开芯片的调试功能,可以先是使能调试功能,防止为打开调试口,
下载了一次程序之后,不能进行二次下载了(不过也不用担心,用串口也是可以进行下载的),再者就是单片机的心脏-时钟树的配置了。接下来和大家分享一下配置过程:
这里系统的时钟,使用滴答定时器;
可以看到这里使用内部RC的8MHZ时钟,AHB最大时钟可以到64Mhz,但是APB1时钟最大时36Mhz,这里我们需要注意下。
打开,生成代码的工程设置界面,如下所示:
配置一PA5引脚的工作模式:
在打开生成的GPIO.H中的 控制GPIO口电平翻转的HAL 函数;
在主函数中编码代码:代码如下
/* 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_USART2_UART_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 */ HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); HAL_Delay(200); } /* USER CODE END 3 */
为了更好的使用cube软件,我们在生成的代码中,编写用户代码时候,一定要在
/* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); HAL_Delay(200); } /* USER CODE END 3 */
上述字样中编写用户的代码,这样我们再次生成的代码的时候,用户编码的代码不会被覆盖,不要问我是咋知道的,问就是沉默;
在debug里面设置一下 Reset and run,这样我们下载程序进入后,代码就会软件复位了,不用引脚复位了。
看一下延时200ms,板载LED灯的闪烁效果
最后:通过查看以往论坛里面的帖子资料和视频,基本了解到到STM32 cube 基本配置过程,开启系统的滴答定时器,GPIO口的配置,这里先写道这里,都说万事开头难,先完成软件环境的搭建,以后再来写其他的任务。
测试代码如下所示: