:STM32G4板卡试用—NUCLEO( 二 )


5、UART、定时器和GPIO
系统时钟配置和UART、定时器、GPIO初始化相关代码由STM32CubeMX生成 , 这个软件大家都会用 , 我用过后的感觉是 , 简单、实用 , 不需要像使用K6x一样 , 看手册、了解时钟门、看寄存器配置等等 。不过使用这个软件不是说不需要了解寄存器配置 , 而是能简化我们的开发 。
CubeMX的配置界面如下图:
:STM32G4板卡试用—NUCLEO
文章图片

文章图片

6、执行效果
有了前面的准备工作 , 加之原来基于K6x的工程就是模块化设计的 , 软件很快就正常工作了 , 下图展示了NUCLEO板与通讯基带板的连接、调试界面获取到的调试信息等 。软件运行效果与K6x的效果完全相同 。
:STM32G4板卡试用—NUCLEO
文章图片

文章图片

开发板通过一个TTL转232 , 连接到通讯基带板上
:STM32G4板卡试用—NUCLEO
文章图片

文章图片

基带板的连接
:STM32G4板卡试用—NUCLEO
文章图片

文章图片

调试口收到的信息 , 与K6x控制时的效果完全相同
问题和试用体会
多年没用STM32系列的MCU , 软件架构确实发生了非常大的变化 , 谈以下几点感受:
① SDK和CubeMX使用:配合CubeMX的SDK , 确实功能强大 , 但相对NXP的SDK来说 , ST的SDK里的例程 , 没有NXP的例程通俗易懂 。当然配合CubeMX后 , 效果和体验确实不一样 。
② 定时器配置问题:CubeMX生成的代码 , 只是初始化了定时器 , 使能了中断 , 需要用户启动定时器和中断 , 代码如下:
HAL_TIM_Base_Start_IT(htim_base);
HAL_TIM_Base_Start(htim_base);
之前没有用过CubeMX生成的代码 , 在这里还是卡壳了一下 , 不过查看了寄存器配置 , 发现定时器没有起来 , 配置一下 , 也还方便 。
再提一点 , 由于之前一直用IAR7 , 这次用IAR8发现 , 它的寄存器查看器 , 打开后只看到了CPU寄存器 , 没有外设寄存器 , 需要右键单击选择寄存器组才行 。
③ UART配置问题:与定时器一样 , CubeMX生成的串口 , 进不了中断 。同样调用HAL_UART_Receive_IT()函数 , 问题解决 。
④ 栈分配:调试过程中出了个问题 , UART5串口接收数据不正常 。
我用TTL转USB接电脑调试 , 运行正常;用开发板接通讯基带板 , 单步跑也正常 , 全速跑时就会报错 , 软件跑飞 。CubeMX生成工程时的栈大小为0x400 , 与原来K6x的一样 , 本想着没有什么问题的 , 但根据之前项目的经验 , 怀疑是栈空间不够 , 将栈大小改为0x800 , 问题解决了 。可能是SDK不一样 , STM32的SDK函数调用深度更深 , 需要的栈资源也更大吧 。
【:STM32G4板卡试用—NUCLEO】总体来讲 , 这次试用感受很好 。由于工作项目压力大 , 收到板子后 , 试用只能在周末和平常的业余时间弄 , 推进速度较慢 , 前后用了3个礼拜的时间 , 但这也从另一方面证明了STM32的开发门槛和难度确实不高 , 易用性很高 。在了解了STM32架构后 , 我想后续使用STM32其他系列的产品也会很快上手 。


推荐阅读