一、前言
时间飞逝一个月过去了,上个月申请的板子到手了,在此非常感谢大大通给了这次机会,有一说一这块快发板相当的漂亮。对了,盒子里面还有一颗线,哈哈哈,应该是提供使用JTAG下载的。Ps:板子上面自带一个下载器,唯一的不足就是板载的接口是micro usb不是type c,并且该接口不能供电只能通过DC接口供电。
本开发板采用32位Arm®Cortex®-M7 S32K3 MCU,频率最高可达 160MHz。提供单核模式、HSE安全引擎、OTA支持、高级连接和低功耗模试,集成 ARM Cortex-M0+ 内核的 HSE-B 硬件信息安全加密模块。最高 100Mbps 以太网 (TSN),最多 6 路 CAN FD,支持多路 LIN 接口、SAI 和 I2S 音频接口。支持用于电机控制的 eMIOS、BCTU、LCU 等外设模块。
二、环境搭建
1、下载S32 Design Studio for S32 Platform以及芯片手册(好像是eclipse IDE的变种)
1.1 IDE:链接
这里需要注意一点安装的时候会弹出下面图片的提示需要激活码。
你点击上面的链接进入下载的页面之后那里有一个选项
点击中间的License Keys然后复制Code。
1.2、芯片手册:链接
2、安装SDK
通过网盘分享的文件:SW32K3_4.4_R21-11_3.0.0_D2303_DS_updatesite.zip
链接: https://pan.baidu.com/s/1e5440HkaKh5YXpzTy2kdTw 提取码: 6daf
由于NXP官网资料繁多,这边的话我就先存百度云网盘里面了。在百度网盘下载之后打开我们下好的IDE按照下图顺序点击:
进入后点击ADD—Archive,等待即可。
到此就结束了。当然你还可以参考NXP官网搭建教程:链接
三、创建模板工程
工程名自行修改
点击SDKs旁边...选择刚刚的SDK随机点击NEXT即可
成功的话就有一个空的工程出现
四、I/O操作接口介绍
在使用其他ARM内核单片机操作I/O口时,都需要通过一个函数传入对应I/O口配置,这里也一样。
1、初始化API
Siul2_Port_Ip_PortStatusType Siul2_Port_Ip_Init(uint32 pinCount,const Siul2_Port_Ip_PinSettingsConfig config[])
pinCount:传入的引脚数量,表示要初始化的GPIO引脚的总数。
config:一个指向配置数组的指针,包含每个引脚的配置选项(如引脚方向、驱动电平等)。
其中Siul2_Port_Ip_PinSettingsConfig 结构体是用于配置硬件引脚的一些参数。这个结构体包含了对端口引脚进行详细设置的各种字段,例如拉电阻、复用、输出缓冲、输入缓冲等配置,详细可以自行前往对应函数查看。
2、I/O操作API
2.1 输出
2.1.1 void Siul2_Dio_Ip_TogglePins( Siul2_Dio_Ip_GpioType * const base,Siul2_Dio_Ip_PinsChannelType pins)
作用:切换指定输出引脚的状态。如果某个引脚的位在参数 pins 中为 1,该引脚的状态会被切换(从高电平变为低电平,或者从低电平变为高电平);而如果某个引脚的位为 0,状态则不会发生变化。
如Siul2_Dio_Ip_TogglePins(base, 1<<led_pins);这就是将led_pins置一
2.1.2 Siul2_Dio_Ip_WritePin(Siul2_Dio_Ip_GpioType * const base,Siul2_Dio_Ip_PinsChannelType pin,Siul2_Dio_Ip_PinsLevelType value)
作用:将指定的引脚设置为低电平('0')或高电平('1')。
如Siul2_Dio_Ip_WritePin(base, led_pins, 0);这就是将led_pins置0
2.1.3 其他
Siul2_Dio_Ip_WritePins(Siul2_Dio_Ip_GpioType * const base,Siul2_Dio_Ip_PinsChannelType pins)
Siul2_Dio_Ip_SetPin(Siul2_Dio_Ip_GpioType * const base,Siul2_Dio_Ip_PinsChannelType pins)
......更多请前往API函数里面查看
2.2 输入
2.2.1 Siul2_Dio_Ip_ReadPin(const Siul2_Dio_Ip_GpioType * const base,Siul2_Dio_Ip_PinsChannelType pin)
作用:读取指定 GPIO 引脚的当前输入值。只有被配置为输入的引脚会返回有意义的值。该函数返回一个 Siul2_Dio_Ip_PinsLevelType 类型的值,表示引脚的电平状态,0 表示低电平,1 表示高电平。
如:Siul2_Dio_Ip_PinsLevelType pinState = Siul2_Dio_Ip_ReadPin(base, key_pin);读取key_pin的值。
2.2.2 其他
Siul2_Dio_Ip_ReadPins(const Siul2_Dio_Ip_GpioType * const base);
五、代码编写
如果采用上面提供的sdk的编程的话,那么io口的配置我们可以和cubemx一样进行图形化编程。我们在新建的工程项目里面点击这个mx结尾的文件
即可进入配置页面。翻阅本次开发版的的原理图可知
板载的rgb灯珠分别对应的是GPIOB的8、9、10,需要的是高电平才能启动点亮。如图到对应IO配置为输出。
配置完成后。可以自行打上标签和标识符方便编程,注意这里的标识符和标签其实就是相当于宏定义。
配置完之后点击更新源代码。
更改主函数代码如下:
#include "Mcal.h"
#include "Siul2_Port_Ip.h"
#include "Siul2_Dio_Ip.h"
int main(void)
{
Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0);
for(;;)
{
Siul2_Dio_Ip_TogglePins(LED_BULE_PORT, (1 << LED_BULE_PIN));
}
return 0;
}
编译下载即可(在这里下载的话,我是使用keil下载的,利用编译出来的hex文件欺骗下载详情怎么使用的话可以看一看视频)
结果:
六、心得
第一次体验NXP的芯片。怎么说呢刚开始挺折腾人的。大概折腾了两三天才折腾明白。不过成就感还是满满的,虽然这一次只是点了个灯,后面的话将一次给大家写测评评一下那个串口还有板载的触摸以及常用的硬件接口当然有机会的话再给大家讲一下CAN。对了,由于篇幅原因,io口的输入我放到视频里面了,大家可以去b站看一下:https://b23.tv/ZnTanZW
此文章来自“S32K312 开发板评测活动”测评者:付楚楚