|
最近几年,我一直在Arduino环境下使用Arduino和Teensys开发板,以及以基于WEB的环境mbed使用FRDM开发板用于处理器控制器的小型项目。但是,当涉及到包含有该处理器的自制PCB的项目时,这些平台和环境就不再有吸引力了。
当然,人们可以使用与Arduino开发板相同的处理器,通过合适的Arduino引导程序烧写,并且在Arduino环境中仍然工作正常。或者,可以使用mbed支持的开发板上的处理器,如STM32,并且通过这些开发板的ST-LINK烧写程序。但是,当使用和mbed支持的开发板不一样的处理器时,人们可能会遇到麻烦,因为普通用户似乎不能够为其他不同的处理器配置mbed环境。而且,事实上,mbed存储在云中,用户可以根据个人喜好决定是否进行下载。
基于以上这些原因,我想搭建一个本地的开发环境,这样我就可以在完全自制的电路板上使用一些比较现代的32位ARM处理器。我也想使用一些不会花很多钱的解决方案,所以,Keil和IAR都不在我的考虑范围。我选择使用基于Cortex-M0+内核的超低功耗STM32L0系列中的STM32L052C8T6。因为该型号具有我需要的功能和性能,同时还是低功耗产品,在将来设计的某个版本有可能支持电池供电。STM32处理器的一个优势在于他们可以通过廉价的探索板或者NUCLEO板内置的ST-LINK进行编程。所以,不需要昂贵的编程器。
STM32处理器的免费开发环境有不止一种。第一次我尝试的是带GNU ARM Eclipse插件设置Eclipse。在花费大量时间阅读GNU ARM Eclipse网站上的各个文章后,并且按照所有需要的文件,仍然不能编译STM32CubeMX生成的配置和初始化代码。也许比我有更多经验、耐心以及了解Eclipse的人可能会使其正常工作。但是,在大量尝试设置include和代码目录,我尝试另一种选择,即由AC6公司提供的SW4STM32环境。
安装开发环境
SW4STM32是一个基于Eclipse的免费工具。虽然我是在Windows平台下使用该工具,它也可以用于Linux和MacOS。我想大多数下面的说明也适用于非Windows平台。
以下是如何安装SW4STM32: 1. 在http://www.openstm32.org/HomePage创建一个账户,并登陆。 2. 按照Documentation > System Workbench for STM32 > Installation manual的说明进行安装。 3. 在http://www.openstm32.org/Downloa ... for+STM32+installer下载相应的安装文件(32位或64位)。选择正确的体系架构(32位或64位)是很重要的,使得ST-LINK调试器正常工作。 4. 运行安装包。 5. 如果你遇到有关JavaRE的警告,需要在Oracle安装相应的Java运行库。也需要和SW4STM32相同的体系架构(32位或64位)。 6. 依次点击对话框。在安装目录的文件夹名字选择C:\Ac6\SystemWorkbench,或者是某个不带空格的其他合适路径。 7. 安装完成后,启动该程序,转到Help > Check for updates更新所有组件到最新版本。
要开始使用软件开发,可以使用ST的STM32CubeMX工具来生成配置和初始化代码: 1. 从http://www.st.com/content/st_com ... rs/stm32cubemx.html下载STM32CubeMX。 2. 安装该工具。
如何使用CubeMX使得生成的代码方便地导入到SW4STM32,并不是显而易见的。我学习这个的时候非常艰辛,在网站http://www.openstm32.org/Importing+a+STCubeMX+generated+project 找到了相关的解决方案。
以下是如何使用: 1. 创建一个工程目录,例如:D:\Projects\STM32。 2. 打开CubeMX,并打开菜单Project > Settings… 3. 输入一个项目名称,如STM32_proj。 4. 将项目的名称更改到先前创建的目录。 5. 将Toolchain / IDE更改成SW4STM32。 6. 如果有一个先前开始的工程,这些字段是不可编辑的。选择“Save Project As…”使得能够编辑字段。
7. 在CubeMX中设置所有的引脚和外设,并且生成代码。 8. 打开SW4STM32。 9. 选择D:\Projects\STM32作为工作区。 10. File > Import… > General > Existing Projects into Workspace > Next
11. 浏览 D:\Projects\STM32作为根目录。应该选择了项目STM32_proj。 12. 不要勾选选项Copy projects into workspace。 13. 点击完成。
不幸的是,在这些操作后该项目并没有编译成功。我在http://www.openstm32.org/tiki-view_faq.php?faqId=4#q21找到了一个相关的解决方案。
该诀窍是让SW4STM32不解析项目中不使用的文件,以下是如何做到这一点: 1. 选择Project > Properties > C/C++ General > Indexer。 2. 勾选Enable project specific settings。 3. 取消勾选Index unused headers。
修复后,代码编译没有错误。
Blinky程序
为了快速测试在处理器中执行代码的方式,我在CubeMX代码的while循环里面添加了一个简单的LED闪烁程序。 - /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
- HAL_Delay(200);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
- HAL_Delay(200);
- }
- /* USER CODE END 3 */
复制代码
Project > Build All在项目文件夹下的Debug目录产生一个.bin文件。我将ST-LINK配置成用于调试外部电路板,并且连接到我的目标板。
然后,通过USB线缆将两个电路板连接到计算机,然后将该.bin文件拖拽到NODE_L053R8硬盘驱动器。编程完成,LED开始闪烁。 |