根据要求完成如下任务:
任务2:基于 FRDM-MCXN236 开发板,连接 I2C 传感器,实现环境数据采集与实时显示
核心微控制器方面:该开发板的核心是一颗 MCX N236 微控制器,搭载 Arm Cortex-M33 内核,主频最高可达 150 MHz,配备 1MB 双组闪存(支持完整 ECC RAM)和 352KB ECC RAM,并集成 SmartDMA 加速器,能够高效地将工作负载分配到模拟与数字外设上。在安全保障方面,该芯片还内置了 EdgeLock 安全区域,一个独立的片上硬件安全子系统,为安全敏感型应用提供硬件级保护。
开发板方面:板载调试器通过 USB-C 一线完成供电、调试和串口通信,同时支持 SWD/SWO、VCOM 虚拟串口以及 USB-to-SPI/I2C 桥接。扩展接口丰富:支持 Arduino、mikroBUS、FRDM 接头、FlexIO/LCD、SmartDMA/摄像头等多种扩展接口,并预留 Pmod 接口位。学生与工程师可以利用丰富的现成扩展模块(如电机驱动、无线模块、传感器)快速搭建验证系统。
应用方向:电机驱动、传感器、工业与消费物联网应用等。
设计思路:使用板卡的I2C功能,采集外部温度传感器数据,并串口打印采集到的数据。
程序流程图:

主要代码部分:
如下所示:使用板卡IIC功能配置温度测量模式、采集补偿温度数据和LED灯状态先红灯再绿灯。
/* =========================
* 系统初始化:红灯亮
* ========================= */
GPIO_PinWrite(
BOARD_LED_RED_GPIO,
BOARD_LED_RED_GPIO_PIN,
LOGIC_LED_ON
);
//配置温度测量模式
uint8_t config[2] = {0xF4, 0x27};
g_MasterCompletionFlag = false;
EXAMPLE_I2C_MASTER.MasterTransmit(
0x76,
config,
2,
false
);
while (!g_MasterCompletionFlag) //等待传输完成
{
}
/* 稍微等待 BMP280 */
SDK_DelayAtLeastUs(10000, SystemCoreClock);
/* =========================================================
* 读取温度原始数据 0xFA ~ 0xFC
* ========================================================= */
uint8_t reg = 0xFA;
uint8_t temp_data[3];
g_MasterCompletionFlag = false;
EXAMPLE_I2C_MASTER.MasterTransmit( //开始读取温度数据
0x76,
®,
1,
true
);
while (!g_MasterCompletionFlag) //等待传输完成
{
}
g_MasterCompletionFlag = false;
EXAMPLE_I2C_MASTER.MasterReceive( //读取3字节温度数据
0x76,
temp_data,
3,
false
);
while (!g_MasterCompletionFlag) //等待传输完成
{
}
PRINTF("TEMP raw: %02X %02X %02X\r\n", //打印温度原始数据
temp_data[0],
temp_data[1],
temp_data[2]);
/* =========================================================
* 读取 BMP280 温度校准参数 0x88 ~ 0x8D
* ========================================================= */
uint8_t cal_reg = 0x88;
uint8_t cal_data[6];
g_MasterCompletionFlag = false;
EXAMPLE_I2C_MASTER.MasterTransmit( //开始读取校准参数
0x76,
&cal_reg,
1,
true
);
while (!g_MasterCompletionFlag) //等待传输完成
{
}
g_MasterCompletionFlag = false;
EXAMPLE_I2C_MASTER.MasterReceive( //读取校准数据
0x76,
cal_data,
6,
false
);
/* 红灯灭 */
GPIO_PinWrite(
BOARD_LED_RED_GPIO,
BOARD_LED_RED_GPIO_PIN,
LOGIC_LED_OFF
);
/* 绿灯亮 */
GPIO_PinWrite(
BOARD_LED_GREEN_GPIO,
BOARD_LED_GREEN_GPIO_PIN,
LOGIC_LED_ON
);
/* 温度补偿 */
int32_t var1;
int32_t var2;
int32_t t_fine;
int32_t temperature;
var1 = ((((int32_t)(raw >> 3)
- ((int32_t)dig_T1 << 1)))
* ((int32_t)dig_T2)) >> 11;
var2 = (((((int32_t)(raw >> 4)
- (int32_t)dig_T1)
* ((int32_t)(raw >> 4)
- (int32_t)dig_T1)) >> 12)
* ((int32_t)dig_T3)) >> 14;
t_fine = var1 + var2;
temperature = (t_fine * 5 + 128) >> 8;
/* 输出 */
PRINTF("temperature = %d.%d%d C\r\n",
(int)(temperature / 100),
(int)((temperature % 100) / 10),
(int)(temperature % 10));
使用 EXAMPLE_I2C_MASTER.MasterTransmit( )、EXAMPLE_I2C_MASTER.MasterReceive( ) 函数对数据进行采集,采集后进行温度补偿,通过串口打印数据到串口助手上位机里。
实物展示:如下所示左侧BMP280传感器的VCC接开发板的3.3V、GND接GND、SCL接SCL、SDA接SDA引脚,插上TypC数据线,系统就开始工作。

活动心得体会:对于FRDM-MCXN236 板卡,基于高性能Arm®Cortex®-M33内核 运行频率高达150MHz,具有1MB闪存、352KB ECC RAM和SmartDMA,使用起来很好入门,确实是一块很好的板卡,希望Funpack 活动越来越好。