- 2024-12-16
-
发表了主题帖:
【MCXN947开发板测评】RTC电子时钟
MCXN947配有RTC计算器,将它与LCD显示屏配合可方便地实现电子时钟功能。
在配置LCD显示屏之前,RTC程序所实现的功能是设置系统时间,如何开始计时,当得到预置的闹钟时间时停止计时,在打开串口的情况下,其运行结构如图1所示。
图1 测试效果
在为LCD屏配置数据显示函数后,即可完成时钟显示的需要,该数据显示函数是:
void LCD_ShowNum(uint16_t x,uint16_t y,uint16_t num,uint8_t len,uint16_t color)
{
uint8_t t,temp;
uint8_t show=0;
for(t=0;t<len;t++)
{
temp=(num/mypow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+8*t,y,' ',0,color);
continue;
}
else
show=1;
}
LCD_ShowChar(x+8*t,y,temp+48,0,color);
}
}
实现电子时钟计时效果的主程序是:
int main(void)
{
irtc_config_t irtcConfig;
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
#if APP_IRTC_IS_SLAVE
irtc_datetime_t alarmDatetime, datetimeGet;
#else
irtc_datetime_t datetime, alarmDatetime, datetimeGet;
datetime.year = 2024;
datetime.month = 12;
datetime.day = 15;
datetime.weekDay = 7;
datetime.hour = 18;
datetime.minute = 55;
datetime.second = 30;
#endif
CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1u);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
CLOCK_EnableClock(kCLOCK_Gpio0);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
GPIO_PinInit(GPIO0, 25U, &led_config);
GPIO_PinInit(GPIO0, 26U, &led_config);
GPIO_PinInit(GPIO0, 24U, &led_config);
GPIO_PinInit(GPIO0, 27U, &led_config);
GPIO_PinInit(GPIO0, 10U, &led_config);
GPIO_PinInit(GPIO0, 28U, &led_config);
Lcd_Init();
LCD_Clear(RED);
LCD_ShowString(20,10,"MCXN947 CLOCK",YELLOW);
LCD_ShowString(20,40," : :",YELLOW);
CLOCK_SetupClk16KClocking(kCLOCK_Clk16KToVbat | kCLOCK_Clk16KToMain);
IRTC_GetDefaultConfig(&irtcConfig);
if (IRTC_Init(RTC, &irtcConfig) == kStatus_Fail)
{
return 1;
}
#if !defined(FSL_FEATURE_RTC_HAS_NO_GP_DATA_REG) || (!FSL_FEATURE_RTC_HAS_NO_GP_DATA_REG)
IRTC_Enable32kClkDuringRegisterWrite(RTC, true);
#endif
#if !defined(FSL_FEATURE_RTC_HAS_NO_TAMPER_FEATURE) || (!FSL_FEATURE_RTC_HAS_NO_TAMPER_FEATURE)
IRTC_ClearTamperStatusFlag(RTC);
#endif
#if !APP_IRTC_IS_SLAVE
IRTC_SetDatetime(RTC, &datetime);
#endif
IRTC_GetDatetime(RTC, &datetimeGet);
LCD_ShowNum(20,40,datetimeGet.hour,2,YELLOW);
LCD_ShowNum(44,40,datetimeGet.minute,2,YELLOW);
LCD_ShowNum(68,40,datetimeGet.second,2,YELLOW);
while (1)
{
IRTC_GetDatetime(RTC, &datetimeGet);
LCD_ShowNum(20,40,datetimeGet.hour,2,YELLOW);
LCD_ShowNum(44,40,datetimeGet.minute,2,YELLOW);
LCD_ShowNum(68,40,datetimeGet.second,2,YELLOW);
}
}
经程序的编译与下载,其显示效果如图2显示,这样就实现了电子时钟的计时功能。
图2 显示效果
- 2024-12-14
-
发表了主题帖:
【MCXN947开发板测评】 P3T1755温度检测与显示
本帖最后由 jennyzhaojie 于 2024-12-14 22:40 编辑
在MCXN947开发板上配有温度传感器P3T1755,该传感器以I2C的方式工作,其电路如图1所示。
图1 传感器电路
在连接串口的情况下,其检测结果如图2所示。
图2 检测结果
为便于观察,在配接LCD显示屏的情况下,其实现温度检测与显示的主程序是:
int main(void)
{
status_t result = kStatus_Success;
i3c_master_config_t masterConfig;
p3t1755_config_t p3t1755Config;
double temperature,d;
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
CLOCK_EnableClock(kCLOCK_Gpio0);
CLOCK_SetClkDiv(kCLOCK_DivI3c1FClk, 6U);
CLOCK_AttachClk(kPLL0_to_I3C1FCLK);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
GPIO_PinInit(GPIO0, 25U, &led_config);
GPIO_PinInit(GPIO0, 26U, &led_config);
GPIO_PinInit(GPIO0, 24U, &led_config);
GPIO_PinInit(GPIO0, 27U, &led_config);
GPIO_PinInit(GPIO0, 10U, &led_config);
GPIO_PinInit(GPIO0, 28U, &led_config);
PRINTF("\r\nI3C master read sensor data example.\r\n");
I3C_MasterGetDefaultConfig(&masterConfig);
masterConfig.baudRate_Hz.i2cBaud = EXAMPLE_I2C_BAUDRATE;
masterConfig.baudRate_Hz.i3cPushPullBaud = EXAMPLE_I3C_PP_BAUDRATE;
masterConfig.baudRate_Hz.i3cOpenDrainBaud = EXAMPLE_I3C_OD_BAUDRATE;
masterConfig.enableOpenDrainStop = false;
masterConfig.disableTimeout = true;
I3C_MasterInit(EXAMPLE_MASTER, &masterConfig, I3C_MASTER_CLOCK_FREQUENCY);
I3C_MasterTransferCreateHandle(EXAMPLE_MASTER, &g_i3c_m_handle, &masterCallback, NULL);
result = p3t1755_set_dynamic_address();
if (result != kStatus_Success)
{
PRINTF("\r\nP3T1755 set dynamic address failed.\r\n");
}
p3t1755Config.writeTransfer = I3C_WriteSensor;
p3t1755Config.readTransfer = I3C_ReadSensor;
p3t1755Config.sensorAddress = SENSOR_ADDR;
P3T1755_Init(&p3t1755Handle, &p3t1755Config);
Lcd_Init();
LCD_Clear(RED);
LCD_ShowString(20,10,"MCXN947",YELLOW);
LCD_ShowString(20,30,"P3T1755",YELLOW);
LCD_ShowString(20,50,"t=",YELLOW);
while (1)
{
result = P3T1755_ReadTemperature(&p3t1755Handle, &temperature);
if (result != kStatus_Success)
{
PRINTF("\r\nP3T1755 read temperature failed.\r\n");
}
else
{
LCD_ShowNum(36,50,temperature,3,YELLOW);
d=((int)(temperature*100))%100;
LCD_ShowChar(60,50,'.',0,YELLOW);
LCD_ShowNum(68,50,d,2,YELLOW);
}
SDK_DelayAtLeastUs(1000000, CLOCK_GetCoreSysClkFreq());
}
}
经程序的编译和下载,其显示效果如图4所示。
图3 电路连接
图4 检测效果
- 2024-12-13
-
发表了主题帖:
【MCXN947开发板测评】PAD功能测试
在MCXN947开发板上配有一个触摸键,其电路如图1所示。
图1 触摸电路
相应的可以在网上查找到它的示例程序,其主程序的内容如下:
int main(void)
{
volatile uint32_t i = 0;
tsi_selfCap_config_t tsiConfig_selfCap;
lptmr_config_t lptmrConfig;
memset((void *)&lptmrConfig, 0, sizeof(lptmrConfig));
CLOCK_EnableClock(kCLOCK_InputMux0);
CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1u);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
CLOCK_SetupClk16KClocking(kCLOCK_Clk16KToVsys);
CLOCK_SetClkDiv(kCLOCK_DivTsiClk, 1u);
CLOCK_AttachClk(kCLK_IN_to_TSI);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
LED1_INIT();
LED2_INIT();
LPTMR_GetDefaultConfig(&lptmrConfig);
TSI_GetSelfCapModeDefaultConfig(&tsiConfig_selfCap);
LPTMR_Init(LPTMR0, &lptmrConfig);
TSI_InitSelfCapMode(APP_TSI, &tsiConfig_selfCap);
TSI_EnableNoiseCancellation(APP_TSI, true);
LPTMR_SetTimerPeriod(LPTMR0, USEC_TO_COUNT(LPTMR_USEC_COUNT, LPTMR_SOURCE_CLOCK));
NVIC_EnableIRQ(TSI0_IRQn);
TSI_EnableModule(APP_TSI, true);
PRINTF("\r\nTSI_V6 Self-Cap mode Example Start!\r\n");
memset((void *)&buffer, 0, sizeof(buffer));
TSI_SelfCapCalibrate(APP_TSI, &buffer);
for (i = 0U; i < FSL_FEATURE_TSI_CHANNEL_COUNT; i++)
{
PRINTF("Calibrated counters for channel %d is: %d \r\n", i, buffer.calibratedData[i]);
}
PRINTF("\r\nNOW, comes to the software trigger scan using polling method!\r\n");
TSI_EnableHardwareTriggerScan(APP_TSI, false); /* Enable software trigger scan */
TSI_DisableInterrupts(APP_TSI, kTSI_EndOfScanInterruptEnable);
TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
TSI_SetSelfCapMeasuredChannel(APP_TSI, BOARD_TSI_ELECTRODE_1);
TSI_StartSoftwareTrigger(APP_TSI);
while (!(TSI_GetStatusFlags(APP_TSI) & kTSI_EndOfScanFlag))
{
}
PRINTF("Channel %d Normal mode counter is: %d \r\n", BOARD_TSI_ELECTRODE_1, TSI_GetCounter(APP_TSI));
#if (defined(PAD_TSI_ELECTRODE_2_ENABLED) && PAD_TSI_ELECTRODE_2_ENABLED)
TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
TSI_SetSelfCapMeasuredChannel(APP_TSI, BOARD_TSI_ELECTRODE_2);
TSI_StartSoftwareTrigger(APP_TSI);
while (!(TSI_GetStatusFlags(APP_TSI) & kTSI_EndOfScanFlag))
{
}
PRINTF("Channel %d Normal mode counter is: %d \r\n", BOARD_TSI_ELECTRODE_2, TSI_GetCounter(APP_TSI));
#endif
TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag | kTSI_OutOfRangeFlag);
PRINTF("\r\nNOW, comes to the software trigger scan using interrupt method!\r\n");
TSI_EnableInterrupts(APP_TSI, kTSI_GlobalInterruptEnable);
TSI_EnableInterrupts(APP_TSI, kTSI_EndOfScanInterruptEnable);
TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
TSI_SetSelfCapMeasuredChannel(APP_TSI, BOARD_TSI_ELECTRODE_1);
while (s_tsiInProgress)
{
TSI_StartSoftwareTrigger(APP_TSI);
}
s_tsiInProgress = true;
PRINTF("Channel %d Normal mode counter is: %d \r\n", BOARD_TSI_ELECTRODE_1, TSI_GetCounter(APP_TSI));
#if (defined(PAD_TSI_ELECTRODE_2_ENABLED) && PAD_TSI_ELECTRODE_2_ENABLED)
TSI_SetSelfCapMeasuredChannel(APP_TSI, BOARD_TSI_ELECTRODE_2);
TSI_StartSoftwareTrigger(APP_TSI);
while (s_tsiInProgress)
{
TSI_StartSoftwareTrigger(APP_TSI);
}
PRINTF("Channel %d Normal mode counter is: %d \r\n", BOARD_TSI_ELECTRODE_2, TSI_GetCounter(APP_TSI));
#endif
PRINTF("\r\nNOW, comes to the hardware trigger scan method!\r\n");
PRINTF("After running, touch pad %s each time, you will see LED toggles.\r\n", PAD_TSI_ELECTRODE_1_NAME);
TSI_EnableModule(APP_TSI, false);
TSI_EnableHardwareTriggerScan(APP_TSI, true);
TSI_EnableInterrupts(APP_TSI, kTSI_EndOfScanInterruptEnable);
TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
TSI_SetSelfCapMeasuredChannel(APP_TSI, BOARD_TSI_ELECTRODE_1);
TSI_EnableModule(APP_TSI, true);
INPUTMUX_AttachSignal(INPUTMUX0, 0U, kINPUTMUX_Lptmr0ToTsiTrigger);
LPTMR_StartTimer(LPTMR0);
while (1)
{
}
}
相应的中断服务程序是:
void TSI0_IRQHandler(void)
{
#if BOARD_TSI_ELECTRODE_1 > 15
if ((TSI_GetSelfCapMeasuredChannel(APP_TSI) | 0x10U) == BOARD_TSI_ELECTRODE_1)
#else
if (TSI_GetSelfCapMeasuredChannel(APP_TSI) == BOARD_TSI_ELECTRODE_1)
#endif
{
if (TSI_GetCounter(APP_TSI) > (uint16_t)(buffer.calibratedData[BOARD_TSI_ELECTRODE_1] + TOUCH_DELTA_VALUE))
{
LED1_TOGGLE();
s_tsiInProgress = false;
}
}
TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
SDK_ISR_EXIT_BARRIER;
}
由此可知,当触摸PAD键时,会启动中断服务,即蓝色LED的状态被翻转一次,见图2和图3所示。
在连接串口的情况下,会见到图4的输出内容。
图2 熄灭状态
图3 点亮状态
图4 串口输出信息
-
回复了主题帖:
【MCXN947开发板测评】LCD屏显示驱动
秦天qintian0303 发表于 2024-12-13 14:47
乍一看 还以为做了适配呢
哈哈!!!
-
发表了主题帖:
【MCXN947开发板测评】LCD屏显示驱动
MCXN947开发板缺少相应的显示器件配备,在筛选了多款显示屏后,还是这款LCD显示屏的效果比较满意,
该显示屏的显示分辨率为160*80像素点,它采用SPI方式工作,为便于连接,原打算直接所用J2接口。
比较无奈的是该显示屏的供电引脚与J2接口的电源引脚是相反的,只好放弃这种设想,显示屏与开发板的连接如图1所示。
具体的连接关系是:
SCL---P0.25
SDA---P0.26
RES---P0.24
DC---P0.27
CS---P0.10
BLK---P0.28
进行高低电平输出的语句定义如下:
#define LCD_SCLK_Set GPIO_PortSet(GPIO0, 1U << 25U)
#defineLCD_SCLK_Clr GPIO_PortClear(GPIO0, 1U << 25U)
#define LCD_SDIN_Set GPIO_PortSet(GPIO0, 1U << 26U)
#define LCD_SDIN_Clr GPIO_PortClear(GPIO0, 1U << 26U)
#define LCD_RST_Set GPIO_PortSet(GPIO0, 1U << 24U)
#define LCD_RST_Clr GPIO_PortClear(GPIO0, 1U << 24U)
#define LCD_DC_Set GPIO_PortSet(GPIO0, 1U << 27U)
#define LCD_DC_Clr GPIO_PortClear(GPIO0, 1U << 27U)
#define LCD_CS_Set GPIO_PortSet(GPIO0, 1U << 10U)
#define LCD_CS_Clr GPIO_PortClear(GPIO0, 1U << 10U)
#define LCD_BLK_Set GPIO_PortSet(GPIO0, 1U << 28U)
图1 显示屏连接
以GPIO口模拟SPI发送字节数据的函数是:
void LCD_Writ_Bus(uint8_t dat)
{
uint8_t i;
LCD_CS_Clr;
for(i=0;i<8;i++)
{
LCD_SCLK_Clr;
if(dat&0x80)
LCD_SDIN_Set;
else
LCD_SDIN_Clr;
LCD_SCLK_Set;
dat<<=1;
}
LCD_CS_Set;
}
发送8位数据的函数是:
void LCD_WR_DATA8(uint8_t dat)
{
LCD_DC_Set;
LCD_Writ_Bus(dat);
}
发送16位数据的函数是:
void LCD_WR_DATA(uint16_t dat)
{
LCD_DC_Set;
LCD_Writ_Bus(dat>>8);
LCD_Writ_Bus(dat);
}
向寄存器发送8位数据的函数是:
void LCD_WR_REG(uint8_t dat)
{
LCD_DC_Clr;
LCD_Writ_Bus(dat);
}
显示屏的初始化函数是:
void Lcd_Init(void)
{
LCD_RST_Clr;
Delay2();
LCD_RST_Set;
Delay2();
LCD_WR_REG(0x11);
delay1();
LCD_WR_REG(0x21);
LCD_WR_REG(0xB1);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3A);
LCD_WR_DATA8(0x3A);
LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3A);
LCD_WR_DATA8(0x3A);
LCD_WR_REG(0xB3);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3A);
LCD_WR_DATA8(0x3A);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3A);
LCD_WR_DATA8(0x3A);
LCD_WR_REG(0xB4);
LCD_WR_DATA8(0x03);
LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x62);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x04);
LCD_WR_REG(0xC1);
LCD_WR_DATA8(0xC0);
LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0x6A);
LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0xEE);
LCD_WR_REG(0xC5);
LCD_WR_DATA8(0x0E);
LCD_WR_REG(0xE0);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x12);
LCD_WR_DATA8(0x27);
LCD_WR_DATA8(0x37);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0xE1);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x0F);
LCD_WR_DATA8(0x06);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x26);
LCD_WR_DATA8(0x36);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0x3A);
LCD_WR_DATA8(0x05);
LCD_WR_REG(0x36);
LCD_WR_DATA8(0x78);
LCD_WR_REG(0x29);
LCD_BLK_Set;
}
用于擦除屏幕显示内容的函数是:
void LCD_Clear(uint16_t Color)
{
uint16_t i,j;
LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
for(i=0;i<LCD_W;i++)
{
for (j=0;j<LCD_H;j++)
{
LCD_WR_DATA(Color);
}
}
}
显示字符的函数是:
void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode,uint16_t color)
{
uint8_t temp;
uint8_t pos,t;
uint16_t x0=x;
if(x>LCD_W-16||y>LCD_H-16) return;
num=num-' ';
LCD_Address_Set(x,y,x+8-1,y+16-1);
if(!mode)
{
for(pos=0;pos<16;pos++)
{
temp=asc2_1608[(uint16_t)num*16+pos];
for(t=0;t<8;t++)
{
if(temp&0x01)LCD_WR_DATA(color);
else LCD_WR_DATA(BLACK);
temp>>=1;
x++;
}
x=x0;
y++;
}
}
else
{
for(pos=0;pos<16;pos++)
{
temp=asc2_1608[(uint16_t)num*16+pos];
for(t=0;t<8;t++)
{
if(temp&0x01)LCD_DrawPoint(x+t,y+pos,color);
temp>>=1;
}
}
}
}
显示字符串的函数是:
void LCD_ShowString(uint16_t x,uint16_t y,const uint8_t *p,uint16_t color)
{
while(*p!='\0')
{
if(x>LCD_W-16){x=0;y+=16;}
if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
LCD_ShowChar(x,y,*p,1,color);
x+=8;
p++;
}
}
进行显示测试的主程序是:
int main(void)
{
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1u);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
CLOCK_EnableClock(kCLOCK_Gpio0);
CLOCK_EnableClock(kCLOCK_Gpio1);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
GPIO_PinInit(GPIO1, 2U, &led_config);
GPIO_PinInit(GPIO0, 25U, &led_config);
GPIO_PinInit(GPIO0, 26U, &led_config);
GPIO_PinInit(GPIO0, 24U, &led_config);
GPIO_PinInit(GPIO0, 27U, &led_config);
GPIO_PinInit(GPIO0, 10U, &led_config);
GPIO_PinInit(GPIO0, 28U, &led_config);
Lcd_Init();
LCD_Clear(RED);
LCD_ShowString(20,10,"MCXN947",YELLOW);
LCD_ShowString(20,30,"LCD Test",YELLOW);
GPIO_PortSet(GPIO0, 1U << 27U);
GPIO_PortSet(GPIO0, 1U << 10U);
while (1)
{
delay();
GPIO_PortToggle(GPIO1, 1u << 2U);
}
}
经程序的编译与下载,其显示效果如图2显示,后面就可以用它来完成显示的工作。
图2 显示效果
- 2024-12-12
-
回复了主题帖:
【MCXN947开发板测评】以按键切换色彩
wangerxian 发表于 2024-12-12 16:10
这板子跑AI有什么想法呀?
还在看,主要学习,据说能进行人脸检测看看能不能实现。
-
回复了主题帖:
【MCXN947开发板测评】以按键切换色彩
秦天qintian0303 发表于 2024-12-12 12:16
这个板子板子资源很丰富
是的 ,一个个地慢慢体验。
-
回复了主题帖:
【MCXN947开发板测评】以按键切换色彩
Jacktang 发表于 2024-12-12 07:46
按键整的很酷炫
哈哈,热热闹闹的!
- 2024-12-11
-
发表了主题帖:
【MCXN947开发板测评】以按键切换色彩
本帖最后由 jennyzhaojie 于 2024-12-11 22:41 编辑
在MCXN947开发板配有RGB_LED和按键,可进行GPIO口的输入和输出功能的测试,RGB_LED和按键ISP的电路如图1所示。
图1 RGB灯和ISP键电路
在对相关引脚进行输入、输出功能配置后,通过对按键状态的配备,可实现一个8进制的计算器,将计算器的值与7种色彩建立起对应的关系,就实现了以按键切换色彩的作用。
实现了按键切换色彩的主程序为:
int main(void)
{
uint8_t n=0;
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
gpio_pin_config_t key_config = {
kGPIO_DigitalInput,
0,
};
CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1u);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
CLOCK_EnableClock(kCLOCK_Gpio0);
CLOCK_EnableClock(kCLOCK_Gpio1);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
GPIO_PinInit(GPIO0, 10U, &led_config);
GPIO_PinInit(GPIO0, 27U, &led_config);
GPIO_PinInit(GPIO1, 2U, &led_config);
GPIO_PinInit(GPIO0, 6U, &key_config);
GPIO_PortSet(GPIO0, 1U << 10U);
GPIO_PortSet(GPIO0, 1U << 27U);
GPIO_PortSet(GPIO1, 1U << 2U);
while (1)
{
if ((GPIO_PinRead(GPIO0, 6U))==0)
{
if (n==0)
{
GPIO_PortClear(GPIO0, 1U << 10U);
}
if (n==1)
{
GPIO_PortSet(GPIO0, 1U << 10U);
GPIO_PortClear(GPIO0, 1U << 27U);
}
if (n==2)
{
GPIO_PortSet(GPIO0, 1U << 27U);
GPIO_PortClear(GPIO1, 1U << 2U);
}
if (n==3)
{
GPIO_PortSet(GPIO1, 1U << 2U);
GPIO_PortClear(GPIO0, 1U << 10U);
GPIO_PortClear(GPIO0, 1U << 27U);
}
if (n==4)
{
GPIO_PortSet(GPIO0, 1U << 10U);
GPIO_PortClear(GPIO1, 1U << 2U);
}
if (n==5)
{
GPIO_PortSet(GPIO0, 1U << 27U);
GPIO_PortClear(GPIO0, 1U << 10U);
}
if (n==6)
{
GPIO_PortClear(GPIO0, 1U << 10U);
GPIO_PortClear(GPIO0, 1U << 27U);
GPIO_PortClear(GPIO1, 1U << 2U);
}
if (n==7)
{
GPIO_PortSet(GPIO0, 1U << 10U);
GPIO_PortSet(GPIO0, 1U << 27U);
GPIO_PortSet(GPIO1, 1U << 2U);
}
delay2();
while(((GPIO_PinRead(GPIO0, 6U))==0));
n=(n+1)%8;
}
}
}
经程序的编译和下载,可得到预期的效果,参见图2至图8所示。
图2 显示红色
图3 显示绿色
图4 显示蓝色
图5 显示黄色
图6 显示粉色
图7 显示亮蓝
图8 显示白色
- 2024-12-09
-
发表了主题帖:
【MCXN947开发板测评】开发环境搭建及下载测试
本帖最后由 jennyzhaojie 于 2024-12-9 12:17 编辑
再次见到NXP的产品,有种重逢的感觉。其实自己接触NXP的产品要比STM的产品早,是从NXP的LPC1114开始到LPC54628,这主要是依托以前有一个NXP的中文社区来宣传和推广其产品。后来该社区被归并,便没再接触这方面的产品,所用这次见到MCXN947,有一种重逢的情怀。
MCXN947开发板的外观如图1所示,其做工还依然是那样工整和紧凑,看上去有种密不透风的感觉。该开发板采用双面放置器件,所用在外观使人产生一种精巧感。
图1 开发板外观
随开发板还一同配有2条Type C接口的数据线,用于供电和调试下载等。
在上电后,其效果见图2所示。
图2 上电效果
MCXN947是支持多种工具进行开发的,为了减少安装软件的种类,仍所用常见的MDK,但版本要选择较新的。
在打开例程的后,其界面效果如图3所示。
图3 开发工具界面
在安装芯片支持升级包后,看见的图4所示的芯片支持。
图4 芯片支持
在设置好生成目标代码后,其编译效果如图5所示。
图5 完成编译
在连接调试接口的情况下,其连接状态如图6所示。
图6 连接状态
经程序下载,其完成情况如图7所示,此时开发板的红色LED灯开始快速的闪动起来。
图7 完成下载
此时,若打开串口调试工具,还可见图8所示的输出信息,说明LED和串口都正常地工作了起来,这样就为后续的开发测评铺平了道路。
图8 串口测试
- 2024-12-02
-
回复了主题帖:
测评入围名单:NXP 边缘AI FRDM-MCXN947开发板
个人信息无误,确认可以完成测评分享计划.