下面来体验一下使用CubeMX生成第一个工程:Hello World + Blink。
CubeMX最近有大改版, 从4.x升级到5.x。从个人角度来讲,这个工具虽仍有提升空间,但快速图形化生成工程、配置功能,非常便捷。可以说因为CubeMX的存在,STM32系列芯片增色不少。
CubeMX的安装就不多说了,很简单的操作。直接打开CubeMX,这里有一个吐槽点,就是每次打开强制下载最新的硬件描述信息,个人认为应该按需下载:
图6 CubeMX打开后的强制下载最新信息窗口
网速好的话一会就下载完了,要是知道板子型号的话使用左边的过滤器很快就可找到Nucleo G070RB板子模板。使用芯片作为模板也可以,但使用板子模版更快捷,有一些现成的配置可直接利用。
图7 选择开发板模板
接下来系统会提示是否使用默认配置。个人认为这是个槽点,如果使用自定义配置, 直接选芯片还选板子干什么。如果是我理解错误,请大咖斧正。
图8 默认配置确认窗口
之后进入项目编辑阶段,因为使用的是默认配置,只需要稍作修改即可。
图9 项目编辑窗口
注意这里有个小坑,默认配置USART使用7bit通信模式。 如果不注意同步修改调试工具的配置那么运行后输出就是乱码。 当然也可以修改调试工具的配置,但是还是按照常规思维将串口改为8bit模式为好。
图10 按照7bit配置初始的乱码
按照常规思维这里改成8bit模式:
图11 常规思维的8bit配置
7bit,9bit这些模式在实际工程中的确有用到的场合,如仅仅传输0-127的数据时用7bit可以提升速率,主从组网时使用9bit多一个控制位。还有些芯片与工具可以支持最低5bit模式,理由就是32个位置可以传输A-Z的字母集了。但是默认配置7bit模式感觉是故意给工程师出附加题的节奏。
其余外设视乎需要而配置,我在项目中还配置了ADC,GPIO等外设,这里不一一详述,后面会给出参考设计的下载地址。所有配置结束后选择代码生成输出类型,本人使用Keil MDK,用户按需选择,最后点击Generate Code就可生成工程框架。
图12 选择代码工程输出类型
如果第一次打开G0系列的工程,Keil MDK还会让你下载一个DFP。按照提示操作即可,总之工程自动化程度的提高也是有代价的,代价就是安装很多支持包。总体而言是值得的。生成的工程直接就可以编译下载运行了,但是要看出点效果来还得加几句,我添加的是打印ADC的采样值,还有LD4闪烁。此外还要重定向USART2到pritnf。
图13 重定向串口到printf
在主文件中添加这个函数:
int stdout_putchar (int ch)
{
uint8_t c = ch;
HAL_UART_Transmit(&huart2, &c, 1, 1);
return ch;
}
其余代码不赘述,感兴趣的直接下后文代码。注意如果你的用户代码要避免下次自动生成代码被覆盖的话, 要加在这种宏之间:
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)g_adc_buf, sizeof(g_adc_buf)/sizeof(g_adc_buf[0]));
printf("Clock:%u Hz\n", SystemCoreClock);
/* USER CODE END 2 */
本贴属于转载,如有侵权请联系删除