查看: 156|回复: 0

[主题月] 【2026电机控制】FRDM-MCXA366 板载SLCD显示温度

[复制链接]
  • TA的每日心情
    开心
    2017-12-26 10:16
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    13

    主题

    249

    帖子

    0

    高级会员

    Rank: 4

    积分
    842
    最后登录
    2026-8-28
    发表于 2026-8-20 23:28:52 | 显示全部楼层 |阅读模式
           拿到了一块FRDM-MCXA366,挺帅的板子,酷黑酷黑的。NXP的开发板精致程度是给好评的。
           这块板子体积不大,但主芯片给的也慷慨,多引脚封装。接插扩展口丰富。这是一款混合信号的MCU,较多的数字化和模拟外设。
    首先用第一个也算模拟的外设断码屏显示,结合数据接口I3C来熟悉下板卡。
           7.png
          这个断码屏从原理图上看的字符也没搜到具体型号,SDK中有例程,那么就用例程来直接用吧。开发环境用的IAR,依靠MCUXpresso Config Tools 26.06拷贝sdk示例生成一个新的独立工程。然后就可以编译运行查看效果了。 依次显示数字和字母。
           9.png 8.png
          基于这个工程改为显示一个2位精度的浮点数也就比较简单了。

    1. static void SLCD_Show_Float(float num)
    2. {
    3.     int32_t total;
    4.     int32_t int_part;
    5.     uint16_t dec_part;
    6.    
    7.    
    8.     if(num >= 0 && num < 130)
    9.     {
    10.       //整体×100 +0.5 四舍五入,规避浮点拆分误差,彻底避开IAR sprintf(%f)坑
    11.       total = (int32_t)(num * 100.0f + 0.5f);
    12.       
    13.       int_part = total / 100;
    14.       dec_part = total % 100;
    15.       
    16.       // 百位、
    17.       int8_t dis_num = (int_part / 100) % 10;
    18.       if(dis_num != 0)
    19.       {
    20.          SLCD_Engine_Show_Num(&slcdEngine, dis_num , NUM_POS5,1);
    21.       }
    22.       //十位
    23.       dis_num = (int_part / 10) % 10;
    24.       if(dis_num != 0)
    25.       {
    26.           SLCD_Engine_Show_Num(&slcdEngine,dis_num , NUM_POS4,1);
    27.       }
    28.      
    29.       //个位
    30.       SLCD_Engine_Show_Num(&slcdEngine, int_part % 10, NUM_POS3,1);
    31.       
    32.      
    33.       
    34.       //小数两位
    35.       SLCD_Engine_Show_Num(&slcdEngine,  dec_part / 10, NUM_POS2,1);
    36.       SLCD_Engine_Show_Num(&slcdEngine,dec_part % 10, NUM_POS1,1);
    37.        //点亮小数点
    38.        SLCD_Engine_Show_Icon(&slcdEngine, ICON_DP6, 1);
    39.     }else{
    40.       
    41.     }
    42. }
    复制代码
        接下来要读取板载的数字传感器,这个传感器支持I3C,也兼容I2C,大体来说,支持动态分配一个设备地址,并且可以有更高的速度。也是借助SDK示例来进行。传感器电路如下,与I2C没啥区别。    2.png 1.png
         分别需要添加FSL_I3C和fsl_p3t1755两层驱动,拷贝代码到新工程即可。查看BOARD_InitBootPins()中是有I3C引脚配置,引脚映射也正确。遂直接debug了代码,然后发现卡到了p3t1755_set_dynamic_address(),这个函数是发送广播给设备分配地址,没有回应就卡在了循环。最终调查发现,时钟不对。MCUXpresso Config Tools默认针对所有板卡外设进行了时钟分配
        5.png 6.png
       但从示例demo中可以看到对I3C外设重新设置了时钟,因此以下代码执行后外设异常。

    1. void BOARD_InitHardware(void)
    2. {
    3.     CLOCK_SetupFRO16KClocking(kCLKE_16K_COREMAIN);
    4.        CLOCK_SetClockDiv(kCLOCK_DivI3C0_FCLK, 15U);
    5.     CLOCK_AttachClk(kFRO_HF_DIV_to_I3C0FCLK);
    6.    
    7.     BOARD_InitBootPins();
    8.     BOARD_InitSLCDPins();
    9.    
    10.      BOARD_InitI3CPins();
    11.     BOARD_InitBootClocks();
    12.    
    13.    
    14.    
    15.     BOARD_InitDebugConsole();

    16.    
    17.     /* Release peripheral reset */
    18.     RESET_ReleasePeripheralReset(kSLCD0_RST_SHIFT_RSTn);
    19. }
    复制代码
    解决起来也简单,调换一下I3C的时钟设置函数到BOARD_InitBootClocks之后就可以了。或者注释掉BOARD_InitBootClocks中对I3C的默认配置。更新后程序运行符合预期了,室内温度还是挺高的      3.png
         但也不及我手指的温度哦
          4.png
        以上结束。温度采集作为可考虑的电机或风扇的闭环控制条件
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2026-9-23 02:53 , Processed in 0.074703 second(s), 21 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表