jinglixixi

  • 2025-03-25
  • 回复了主题帖: 测评入围名单: 国民技术高性能MCU N32H487开发板

    个人信息无误,确认可以完成测评分享计划。

  • 回复了主题帖: 【航芯ACM32F403开发板测评】+NTC温度检测及PTC加热台控制

    秦天qintian0303 发表于 2025-3-25 08:53 说实话不太好调,ti好像有个标准末班,该参数就行   以前看它们用仿真软件设参数后看前行变化趋势来定方案,后来就没再接触。 但没有PID调节,其温度的滞后效应很严重,再断电后依然会爬升几度。

  • 回复了主题帖: 【航芯ACM32F403开发板测评】+NTC温度检测及PTC加热台控制

    秦天qintian0303 发表于 2025-3-24 21:54 没加个PID控制啊    应该加,没做过需要充电。

  • 2025-03-24
  • 回复了主题帖: >>征集 | 晒电机控制痛点与难题,一起寻求最优解!

    痛点问题可以为:芯片选型、效率优化、控制精度、抗干扰性、成本控制、算法、安全、电磁干扰、热管理、工具使用等开发相关内容。 目前市面上有不少电机控制板,通过这种控制板可以大大地化解驱动的难度和问题。但在实际使用时,也存在一些问题,就是在使用时需要掌握一些电机的参数及参数配置的知识,没有这方面的支持,也是存在一定 障碍的,自己就曾为体验某家电机控制板的性能,而购置直流无刷电机,接上后,通过调节电位,电机也能够转动,但电机转速的调节范围很窄,转速不是很丝滑,甚至会出现一定的特动。但想要调节参数时却发现,该电机却没有配置相应的名牌,没有相应的参数支持也就无法达到运行品质的提高,这便是痛点问题之一,若是在电机控制板上配置相应的参数检测功能,实现参数的自匹配来优化运行品质将是一件非常有意义的事情。

  • 发表了主题帖: 【航芯ACM32F403开发板测评】+NTC温度检测及PTC加热台控制

    本帖最后由 jinglixixi 于 2025-3-24 17:25 编辑 前面曾介绍过单通道的A/D检测方法,将它与NTC热敏电阻相结合即可进行温度测控。 为此,这里是选取通道1来连接NTC进行温度检测,即用PA7来连接NTC的模拟信号输出端。 为指示控制状态,是通过板载的LED( PF3),点亮时为加热的状态,熄灭时表示停止状态。 实现温度检测的功能函数为: void ADC_Test_Polling_Nchannels(void) { uint32_t i, VrefP, Voltage; uint32_t lu32_COM_OK = 0; uint32_t t; VrefP = ADC_GetVrefP(ADC_CHANNEL_8); ADC_Init_Polling_Nchannels(); while(1) { System_Delay_MS(500); for (i = 0; i < BUFFER_LENGTH; i++) { gu32_AdcBuffer[i] = 0; } HAL_ADC_Polling(&ADC_Handle, gu32_AdcBuffer, ADC_Handle.ChannelNum, 0); for (i = 13; i < 14; i++) { Voltage = (gu32_AdcBuffer[i]&0xFFF)*VrefP/4095; t=bh(Voltage); if(t>26) { HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_SET); OLED_ShowString(80,6,"OF",16); } else { HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_CLEAR); OLED_ShowString(80,6,"ON",16); } OLED_ShowNum(80,2,t,3,16); } } } 实现温度测控的主程序为: int main(void) { System_Init(); Uart_Init(); Oled_Config(); OLED_Init(); OLED_Clear(); OLED_ShowString(10,0,"Simulation",16); OLED_ShowString(0,2,"h= t=",16); OLED_ShowString(0,4,"H= T= 26",16); OLED_ShowString(16,6,"OF OF",16); JDQ_Init(); ADC_Test_Polling_Nchannels(); while(1) { } } 经程序的编译和下载,其测试结果如图2和图3所示。   图2 线路连接       图3 温度测控     图4 PTC加热控制  

  • 2025-03-21
  • 回复了主题帖: 【新年花灯】莫负时光砥砺前行

    本帖最后由 jinglixixi 于 2025-3-21 20:40 编辑   图1 器件布局     图2 器件连接关系     图3  开发板PCB   参考程序: void GPIO_config(void) { GPIO_InitTypeDef GPIO_InitStructure; //结构定义 GPIO_InitStructure.Pin = GPIO_Pin_All; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作 GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //初始化 GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); } /******************** 主函数 **************************/ void main(void) { u8 i,tmp; GPIO_config(); while(1) { tmp = 1; for(i=0; i<8; i++) { P3 = ~tmp; tmp <<= 1; delay_ms(250); } ... tmp = 0x80; for(i=0; i<8; i++) { P3 = ~tmp; tmp >>= 1; delay_ms(250); } ... } }  

  • 2025-03-18
  • 回复了主题帖: 【泰坦触觉 TITAN Core开发套件】无线通讯在触觉感知控制器中的使用

    freebsder 发表于 2025-3-18 17:14 这是命题作文? 有创意DIY参考建议

  • 回复了主题帖: 【泰坦触觉 TITAN Core开发套件】无线通讯在触觉感知控制器中的使用

    Jacktang 发表于 2025-3-18 07:45 毕竟也用NRF2401模块实现了触觉感知无线控制功能,还行 哈哈,慢慢改进提高吧!

  • 2025-03-14
  • 发表了主题帖: 【泰坦触觉 TITAN Core开发套件】无线通讯在触觉感知控制器中的使用

    本帖最后由 jinglixixi 于 2025-3-16 15:28 编辑 由于触觉感知控制器的特殊性,要求控制器与触觉马达之间必须采用无线通讯的方式,且要求触觉马达一侧必须足够的小并能耗低,这都是硬性的指标。 在无法短期内无法直接实现开发板间的蓝牙通讯的情况下,只好退而退而求其次,以其它的方式来实现无线通讯,其构成方式如图1所示。   图1 构成形式   在该处理方式中,是由单片机和NRF2401模块构成了2个无线通讯的收发单元。当一方处于发送方时,另一方则转为接收方。 若左侧按下发送键,则右侧的LED灯被点亮,表示触觉马达受控处于工作状态。当然由于双方的地位是对等的,当右侧按下发送键,则左侧的LED灯被点亮(注:在触觉感知控制器中,则只是单向传送控制指令)。   图2 左侧控制右侧     图3 右侧控制左侧   以此为基础,在添加串行通讯的情况下,就可以由控制器来发送指令,由触觉马达来接收指令来实现无线控制的目标。   图4 控制器一侧     图5 触觉马达一侧     图6  无线通讯控制马达   图7 通讯直接控制马达    注 :后期以采用套件核心板上的驱动芯片为宜。   图8 整体测试   无线通信演示: [localvideo]10af947166e1a02603518969fbb6e04f[/localvideo]   无线控制马达: [localvideo]234e0d99c894409df0d31b044e53e662[/localvideo]   无线直控马达: [localvideo]73015cd61091802e8a96753a0455447d[/localvideo]   整体测试: [localvideo]ed38f7c30399d10fdd22316362ae10e2[/localvideo]    

  • 2025-03-10
  • 回复了主题帖: 【航芯ACM32F403开发板测评】+PWM功能测试

    秦天qintian0303 发表于 2025-3-9 09:46 看样子在做检测的时候好的注意点电磁兼容的防护  的确是一种启示

  • 2025-03-09
  • 回复了主题帖: 【航芯ACM32F403开发板测评】+PWM功能测试

    lugl4313820 发表于 2025-3-8 15:44 占空比好象有跳动呀,闪得不是很流畅,是视频减少了帧数原因吗? 的确如此,似乎是电流不足,抖动后就熄灭了。

  • 2025-03-08
  • 回复了主题帖: 【航芯ACM32F403开发板测评】+PWM功能测试

    Jacktang 发表于 2025-3-8 11:21 手指随意地划过PC8引脚,则会产生不同的占空比,这个测试强 纯属无意间的发现

  • 2025-03-07
  • 发表了主题帖: 【航芯ACM32F403开发板测评】+PWM功能测试

    利用ACM32F403的定时器可实现多种PWM方面的应用,这里就以2个实际测试加以介绍。   1.LED灯亮度调节 在通常情况下,PWM调节的示例多是采用较高频率的输出,因此不借助示波器是较难观察的。 为了便于观察,这里是用TIM3作定时器,以PA7输出PWM,并通过占空比的调节来改变LED的亮度。   图1 线路连接   TIM3的初始化函数为: void TIM3_Init(void) { TIM_OC_InitTypeDef Tim_OC_Init_Para; uint32_t timer_clock; timer_clock = System_Get_APBClock(); TIM_Handler.Instance = TIM3; TIM_Handler.Init.ARRPreLoadEn = TIM_ARR_PRELOAD_ENABLE; TIM_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; TIM_Handler.Init.CounterMode = TIM_COUNTERMODE_UP; TIM_Handler.Init.RepetitionCounter = 0; TIM_Handler.Init.Prescaler = (timer_clock/TIM_CLOCK_FREQ) - 1; TIM_Handler.Init.Period = (TIM_CLOCK_FREQ/v) - 1; TIM3_MSP_Pre_Init(&TIM_Handler); HAL_TIMER_Base_Init(&TIM_Handler); Tim_OC_Init_Para.OCMode = OUTPUT_MODE_PWM1; Tim_OC_Init_Para.OCIdleState = OUTPUT_IDLE_STATE_0; Tim_OC_Init_Para.OCNIdleState = OUTPUT_IDLE_STATE_0; Tim_OC_Init_Para.OCPolarity = OUTPUT_POL_ACTIVE_HIGH; Tim_OC_Init_Para.OCNPolarity = OUTPUT_POL_ACTIVE_HIGH; Tim_OC_Init_Para.OCFastMode = OUTPUT_FAST_MODE_DISABLE; Tim_OC_Init_Para.Pulse = 0; HAL_TIMER_Output_Config(TIM_Handler.Instance, &Tim_OC_Init_Para, TIM_CHANNEL_2); TIM3_MSP_Post_Init(); DMA_TIM3_CC2_Init(); HAL_TIM_ENABLE_DMA(&TIM_Handler, TIMER_DMA_EN_CC2); HAL_DMA_Start(TIM_Handler.hdma[TIM_DMA_CC2_INDEX], (UINT32)CCR2_Value, (UINT32)&TIM_Handler.Instance->CCR2, 3); HAL_TIM_PWM_Output_Start(TIM_Handler.Instance, TIM_CHANNEL_2); } 不断改变PWM参数的程序为: void Timer_PWM_Output_DMA_Test(void) { TIM3_Init(); v=1; while(1) { v=(v+1)%500; TIM3_Init(); System_Delay_MS(10); } } 实现测试效果的主程序为: int main(void) { System_Init(); Uart_Init(); Timer_PWM_Output_DMA_Test(); while(1) { } } 经程序的编译与下载,其测试效果如视频所示。   演示视频: [localvideo]dba18266f1a94d87a359da87a0561a88[/localvideo]   2.占空比检测 改检测的是以TIM1作定时器,由PA8输出100KHz的MCO信号作为TIM1定时器的输入信号,通过PC8来接入。通过定时器的输入捕获功来测输入信号的占空比。 占空比检测的函数内容为: void Timer_PWM_Input_Test(void) { uint32_t timer_clock; timer_clock = System_Get_APBClock(); if (System_Get_SystemClock() != System_Get_APBClock()) // if hclk/pclk != 1, then timer clk = pclk * 2 { timer_clock = System_Get_APBClock() << 1; } TIM1_Init(); while(1) { TIM1_PWM_Input_Test(timer_clock); HAL_TIM_Capture_Stop(TIM_Handler.Instance, TIM_CHANNEL_1); HAL_TIM_Capture_Stop(TIM_Handler.Instance, TIM_CHANNEL_2); HAL_TIMER_Clear_Capture_Flag(&TIM_Handler, TIM_CHANNEL_1); HAL_TIMER_Clear_Capture_Flag(&TIM_Handler, TIM_CHANNEL_2); System_Delay_MS(1000); } } 实现测试的主程序为: int main(void) { System_Init(); Uart_Init(); System_Set_Buzzer_Divider( (System_Get_SystemClock()/BUZZER_OUTPUT_FREQ) - 1, FUNC_ENABLE); System_Delay(1000); Timer_PWM_Input_Test(); while(1) { } } 经程序的编译与下载,其测试效果如图2和图3所示。 其中,图2是在用导线连接PA8和PC8的情况下,其占空比是稳定在50%。    图2  稳定的占空比   图3的检测则比较随意,即以手指随意地划过PC8引脚,则会产生不同的占空比。   图3  随机测试

  • 回复了主题帖: 【航芯ACM32F403开发板测评】+A/D数据采集及程序分析

    lugl4313820 发表于 2025-3-7 10:42 老师从各种角度都对ADC的驱动,实际串口输出进行了分享,很有借鉴意义,感谢分享优质作品! 感谢支持,进行与大家进行分享。

  • 2025-03-06
  • 发表了主题帖: 【航芯ACM32F403开发板测评】+A/D数据采集及程序分析

    在ACM32F403芯片内,集成了一个多通道的 12 位高精度ADC,其采集速度可达2M sps。 对于A/D数据采集,厂家提供了具用多种工作模式的Demo程序以供用户学习和验证。 以ADC_Test(TEST_POLLING_NCHANNELS)测试为例,其测试结果图1和图2所示。   图1 串口通讯就绪     图2 A/D数据采集   即每按下一次板上的用户键,就输出一轮多通道的数据采集值,其程序如下: void ADC_Test_Polling_Nchannels(void) { uint32_t i, VrefP, Voltage; uint32_t lu32_COM_OK = 0; printfS("The ADC test ADC_Test_Polling_Nchannels start."); VrefP = ADC_GetVrefP(ADC_CHANNEL_8); printfS("The VrefP value is : %d \r\n", VrefP); UserKEY_Init(); printfS("---------- Please press the USR_PB button ----------\r\n"); ADC_Init_Polling_Nchannels(); while(1) { while(false == UserKEY_Get()); System_Delay_MS(500); for (i = 0; i < BUFFER_LENGTH; i++) { gu32_AdcBuffer[i] = 0; } HAL_ADC_Polling(&ADC_Handle, gu32_AdcBuffer, ADC_Handle.ChannelNum, 0); for (i = 0; i < ADC_Handle.ChannelNum; i++) { printfS("The adc convert result : Channel %d = 0x%08x. ", gu32_AdcBuffer[i]>>16 & 0xFF,gu32_AdcBuffer[i]); Voltage = (gu32_AdcBuffer[i]&0xFFF)*VrefP/4095; printfS("The Voltage is: %d mV \r\n", Voltage); lu32_COM_OK++; } printfS("ADC Test OK count %d times \r\n", lu32_COM_OK); } } 通过仔细观察,会发现这里少了对通道 ADC_CHANNEL_3 和ADC_CHANNEL_11的采集,这是为什么呢? 原来 ADC_CHANNEL_3所使用的引脚是PA2,而ADC_CHANNEL_11所使用的引脚是PA3。 而串口2的TX2所用的引脚正是PA2,RX2所用的引脚则是PA3,为此要使用串口2来输出信息,就必须回避对这2个引脚的使用。 当然,若使用串口1来输出信息是可以避开这个问题,但使用串口1就不能通过调试口来观察信息了,必须外接USB转TTL模块来进行串行通讯。 那为什么采集的通道顺序不是按自然的由小到大顺序呢? 原来这是与其初始化程序的编排有关,其内容为: void ADC_Init_Polling_Nchannels(void) { ADC_ChannelConfTypeDef ADC_ChannelConf; ADC_Handle.Init.ClockDiv = ADC_CLOCK_DIV8; ADC_Handle.Init.ConConvMode = ADC_CONCONVMODE_DISABLE; ADC_Handle.Init.JChannelMode = ADC_JCHANNELMODE_DISABLE; ADC_Handle.Init.DiffMode = ADC_DIFFMODE_DISABLE; ADC_Handle.Init.DMAMode = ADC_DMAMODE_DISABLE; ADC_Handle.Init.OverMode = ADC_OVERMODE_DISABLE; ADC_Handle.Init.OverSampMode = ADC_OVERSAMPMODE_DISABLE; ADC_Handle.Init.AnalogWDGEn = ADC_ANALOGWDGEN_DISABLE; ADC_Handle.Init.ExTrigMode.ExTrigSel = ADC_SOFTWARE_START; ADC_Handle.Init.ChannelEn = ADC_CHANNEL_0_EN | ADC_CHANNEL_1_EN | ADC_CHANNEL_2_EN | \ ADC_CHANNEL_4_EN | ADC_CHANNEL_5_EN | ADC_CHANNEL_6_EN | ADC_CHANNEL_7_EN | \ ADC_CHANNEL_8_EN | ADC_CHANNEL_9_EN | ADC_CHANNEL_10_EN | \ ADC_CHANNEL_12_EN | ADC_CHANNEL_13_EN | ADC_CHANNEL_14_EN | ADC_CHANNEL_15_EN; ADC_Handle.Instance = ADC; HAL_ADC_Init(&ADC_Handle); /* The total adc regular channels number */ ADC_Handle.ChannelNum = 14; /* Add adc channels */ ADC_ChannelConf.Channel = ADC_CHANNEL_0; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ1; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_15; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ2; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_2; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ3; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_4; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ4; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_5; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ5; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_6; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ6; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_7; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ7; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_8; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ8; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_9; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ9; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_10; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ10; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_12; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ11; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_13; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ12; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_14; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ13; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); ADC_ChannelConf.Channel = ADC_CHANNEL_1; ADC_ChannelConf.RjMode = 0; ADC_ChannelConf.Sq = ADC_SEQUENCE_SQ14; ADC_ChannelConf.Smp = ADC_SMP_CLOCK_320; HAL_ADC_ConfigChannel(&ADC_Handle,&ADC_ChannelConf); } 这样我们在看如下的主程序,就清晰了很多。 int main(void) { System_Init(); Uart_Init(); ADC_Test(TEST_POLLING_NCHANNELS); while(1) { } } 此外,在此基础上我们还以随意地裁剪采集的通道数量,乃至只采集需要的指定通道。 只采集通道0和通道15的结果如图3所示,连续对通道1进行数据采集的结果如图4所示。   图3 双通道采集     图4 单通道连续采集  

  • 2025-03-05
  • 回复了主题帖: 【航芯ACM32F403开发板测评】+RTC与电子时钟

    lugl4313820 发表于 2025-3-5 07:29 好强大的OLED,感谢大佬分享时钟模块,老师的数据线看起来非常特别呀! 这种接头的方式比较皮实,不易损坏。

  • 回复了主题帖: 【航芯ACM32F403开发板测评】+RTC与电子时钟

    eew_Eu6WaC 发表于 2025-3-5 08:01 好简洁的代码,看着使用非常方便,内置RTC精确度高嘛? 在没有高精度检测设备的情况下,其精度在日常应用中应该没问题。

  • 发表了主题帖: 【航芯ACM32F403开发板测评】+RTC与电子时钟

    本帖最后由 jinglixixi 于 2025-3-5 11:10 编辑 ACM32F403配有内置得RTC计时器,可以方便地实现日历功能,将它与前面得OLED屏相结合就可实现电子时钟得显示功能。 为实现数值的显示,需添加数值显示函数,其内容为: void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size2) { uint8_t t,temp; uint8_t enshow=0; for(t=0;t<len;t++) { temp=(num/oled_pow(10,len-t-1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { OLED_ShowChar(x+(size2/2)*t,y,' ',size2); continue; } else enshow=1; } OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); } } 要使用RTC的计时功能,需对其进行配置和初始化,其内容为: RTC_Handle.u32_ClockSource = RTC_CLOCK_XTL; RTC_Handle.u32_Compensation = COMPENSATION_INCREASE; RTC_Handle.u32_CompensationValue = 0x05; HAL_RTC_Config(&RTC_Handle); /* Set RTC Time¡¢Date */ gstr_Time_Set.u8_Hours = 0x12; gstr_Time_Set.u8_Minutes = 0x30; gstr_Time_Set.u8_Seconds = 0x00; HAL_RTC_SetTime(&gstr_Time_Set); gstr_Date_Set.u8_Year = 0x25; gstr_Date_Set.u8_Month = RTC_MONTH_MARCH; gstr_Date_Set.u8_Date = 0x6; gstr_Date_Set.u8_WeekDay = RTC_WEEKDAY_FRIDAY; HAL_RTC_SetDate(&gstr_Date_Set); 实现电子时钟显示功能的测试主程序为: int main(void) { System_Init(); Uart_Init(115200); Oled_Config(); OLED_Init(); OLED_Clear(); OLED_ShowString(10,0,"ACM32F403",16); OLED_ShowString(10,2,"0.96 OLED",16); OLED_ShowString(10,4," : :",16); APP_RTC_Test(); while (1) { HAL_RTC_GetTime(&gstr_Time_Get); HAL_RTC_GetDate(&gstr_Date_Get); HAL_RTC_GetTime(&gstr_Time_Get_Again); if (gstr_Time_Get.u8_Seconds != gstr_Time_Get_Again.u8_Seconds) { continue; } if (fu32_Seconds != gstr_Time_Get.u8_Seconds) { fu32_Seconds = gstr_Time_Get.u8_Seconds; s=gstr_Time_Get.u8_Hours; s=s/16*10+s%16; OLED_ShowNum(10,4,s,2,16); s=gstr_Time_Get.u8_Minutes; s=s/16*10+s%16; OLED_ShowNum(34,4,s,2,16); s=gstr_Time_Get.u8_Seconds; s=s/16*10+s%16; OLED_ShowNum(58,4,s,2,16); } } } 经程序的编译和下载,其显示效果如图所示。   计时效果图  

  • 2025-03-04
  • 回复了主题帖: 【泰坦触觉 TITAN Core开发套件】开发技术探索与期待

    本帖最后由 jinglixixi 于 2025-3-4 21:43 编辑 秦天qintian0303 发表于 2025-3-4 10:23 一开始我想用Adafruit ESP32-S3 Reverse TFT Feather着,用cpy开发,结果没有对应的心跳检测的驱动库,只 ... 这个M5stack挺不错的,查到价格了值得拥有!

  • 2025-03-03
  • 回复了主题帖: 【泰坦触觉 TITAN Core开发套件】开发技术探索与期待

    okhxyyo 发表于 2025-3-3 13:33 已经反馈过去了哈,有进展了给大家说哈 感谢!!!

统计信息

已有1010人来访过

  • 芯积分:2764
  • 好友:6
  • 主题:483
  • 回复:1104

留言

你需要登录后才可以留言 登录 | 注册


okhxyyo 2020-7-21
jinglixixi: 我的测评HT32F1653开发板一直没收到呀!
还没寄出去哦。你的收件信息是对的吧?明天会给寄出去
jinglixixi 2020-7-21
我的测评HT32F1653开发板一直没收到呀!
okhxyyo 2016-12-14
jinglixixi: 开发板已收到。
好的哈,那我等着你的测评文章拉
查看全部