在线时间108 小时
UID2094411
注册时间2017-9-13
NXP金币115
TA的每日心情 | 开心 2017-12-26 10:16 |
|---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
高级会员

- 积分
- 842
- 最后登录
- 2026-8-28
|
拿到了一块FRDM-MCXA366,挺帅的板子,酷黑酷黑的。NXP的开发板精致程度是给好评的。
这块板子体积不大,但主芯片给的也慷慨,多引脚封装。接插扩展口丰富。这是一款混合信号的MCU,较多的数字化和模拟外设。
首先用第一个也算模拟的外设断码屏显示,结合数据接口I3C来熟悉下板卡。
这个断码屏从原理图上看的字符也没搜到具体型号,SDK中有例程,那么就用例程来直接用吧。开发环境用的IAR,依靠MCUXpresso Config Tools 26.06拷贝sdk示例生成一个新的独立工程。然后就可以编译运行查看效果了。 依次显示数字和字母。
基于这个工程改为显示一个2位精度的浮点数也就比较简单了。
- static void SLCD_Show_Float(float num)
- {
- int32_t total;
- int32_t int_part;
- uint16_t dec_part;
-
-
- if(num >= 0 && num < 130)
- {
- //整体×100 +0.5 四舍五入,规避浮点拆分误差,彻底避开IAR sprintf(%f)坑
- total = (int32_t)(num * 100.0f + 0.5f);
-
- int_part = total / 100;
- dec_part = total % 100;
-
- // 百位、
- int8_t dis_num = (int_part / 100) % 10;
- if(dis_num != 0)
- {
- SLCD_Engine_Show_Num(&slcdEngine, dis_num , NUM_POS5,1);
- }
- //十位
- dis_num = (int_part / 10) % 10;
- if(dis_num != 0)
- {
- SLCD_Engine_Show_Num(&slcdEngine,dis_num , NUM_POS4,1);
- }
-
- //个位
- SLCD_Engine_Show_Num(&slcdEngine, int_part % 10, NUM_POS3,1);
-
-
-
- //小数两位
- SLCD_Engine_Show_Num(&slcdEngine, dec_part / 10, NUM_POS2,1);
- SLCD_Engine_Show_Num(&slcdEngine,dec_part % 10, NUM_POS1,1);
- //点亮小数点
- SLCD_Engine_Show_Icon(&slcdEngine, ICON_DP6, 1);
- }else{
-
- }
- }
复制代码 接下来要读取板载的数字传感器,这个传感器支持I3C,也兼容I2C,大体来说,支持动态分配一个设备地址,并且可以有更高的速度。也是借助SDK示例来进行。传感器电路如下,与I2C没啥区别。
分别需要添加FSL_I3C和fsl_p3t1755两层驱动,拷贝代码到新工程即可。查看BOARD_InitBootPins()中是有I3C引脚配置,引脚映射也正确。遂直接debug了代码,然后发现卡到了p3t1755_set_dynamic_address(),这个函数是发送广播给设备分配地址,没有回应就卡在了循环。最终调查发现,时钟不对。MCUXpresso Config Tools默认针对所有板卡外设进行了时钟分配
但从示例demo中可以看到对I3C外设重新设置了时钟,因此以下代码执行后外设异常。
- void BOARD_InitHardware(void)
- {
- CLOCK_SetupFRO16KClocking(kCLKE_16K_COREMAIN);
- CLOCK_SetClockDiv(kCLOCK_DivI3C0_FCLK, 15U);
- CLOCK_AttachClk(kFRO_HF_DIV_to_I3C0FCLK);
-
- BOARD_InitBootPins();
- BOARD_InitSLCDPins();
-
- BOARD_InitI3CPins();
- BOARD_InitBootClocks();
-
-
-
- BOARD_InitDebugConsole();
-
- /* Release peripheral reset */
- RESET_ReleasePeripheralReset(kSLCD0_RST_SHIFT_RSTn);
- }
复制代码 解决起来也简单,调换一下I3C的时钟设置函数到BOARD_InitBootClocks之后就可以了。或者注释掉BOARD_InitBootClocks中对I3C的默认配置。更新后程序运行符合预期了,室内温度还是挺高的
但也不及我手指的温度哦
以上结束。温度采集作为可考虑的电机或风扇的闭环控制条件
|
|