The OP
Published on 2022-9-27 00:24
Only look at the author
/* *************************************************** **************************** * @File APP.c * @author CWT * @version V1.0.0 * @date 2020 * @brief LCD demo source code. *************************************************** **************************** */ #include "APP.h" #include "SHT30.h" #include "lcd_GDC04212.h" #include "lcd_GDC03828.h" #include "lcd_YR1618A.h" #include "buzzer.h" #include "TKEY.h" LCD_HandleTypeDef *lcdhandle; //LCD Handle I2C_HandleTypeDef I2C_Handle; //I2C Handle #define BUFFER_LENGTH (256) uint8_t gu8_TxBuffer[BUFFER_LENGTH]; uint8_t gu8_RxBuffer[BUFFER_LENGTH]; uint8_t gu8_time_count_free = 0;//0-free,1-0.5s,2-1s, uint32_t gu32_time_1s_cont = 0; extern volatile uint32_t gu32_SystemCount; void(*LCD_DisplayNum)(uint32_t);//LCD void(*LCD_Init)(void);//LCD extern void (*SysTick_Handler_Callback)(void); extern LCD_HandleTypeDef lcdhandle_GDC04212; extern LCD_HandleTypeDef lcdhandle_GDC03828; extern LCD_HandleTypeDef lcdhandle_YR1618A; TIM_HandleTypeDef TIM6_Handler; DMA_HandleTypeDef DMA_CH1_Handle; DMA_LLI_InitTypeDef DMA_CH1_Handle_link1; DMA_LLI_InitTypeDef DMA_CH1_Handle_link2; DMA_LLI_InitTypeDef DMA_CH1_Handle_link3; DMA_LLI_InitTypeDef DMA_CH1_Handle_link4; DMA_LLI_InitTypeDef DMA_CH1_Handle_link5; DMA_LLI_InitTypeDef DMA_CH1_Handle_link6; DMA_LLI_InitTypeDef DMA_CH1_Handle_link7; DMA_LLI_InitTypeDef DMA_CH1_Handle_link8; DMA_LLI_InitTypeDef DMA_CH1_Handle_link9; #if defined LCD_GDC04212 //GDC042129 ·± °1111 ±-"9999" uint32_t wdata1[16]={0x06000600,0x06000600,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata2[16]={0x0B060B06,0x0B060B06,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata3[16]={0xF020F02,0xF020F02,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata4[16]={0x06030603,0x06030603,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata5[16]={0xD030D03,0xD030D03,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata6[16]={0x0D070D07,0x0D070D07,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata7[16]={0x07000700,0x07000700,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata8[16]={0x0F070F07,0x0F070F07,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata9[16]={0xF030F03,0xF030F03,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; #elif defined LCD_GDC03828 //GDC038289 ·± °1111 ±-"9999" uint32_t wdata1[16]={0x06000600,0x06000600,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata2[16]={0x0B060B06,0x0B060B06,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata3[16]={0xF020F02,0xF020F02,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata4[16]={0x06030603,0x06030603,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata5[16]={0xD030D03,0xD030D03,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata6[16]={0x0D070D07,0x0D070D07,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata7[16]={0x07000700,0x07000700,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata8[16]={0x0F070F07,0x0F070F07,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata9[16]={0xF030F03,0xF030F03,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; #else//YR1618A9 ·± °1111 ±-"9999" uint32_t wdata1[16]={0x06C8E0FF,0x02488055,0x06C8E0FF,0x02488055,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata2[16]={0x048060AA,0x00000000,0x048060AA,0x00000000,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata3[16]={0x06C8E0FF,0x048060AA,0x02488055,0x02488055,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata4[16]={0x06C8E0FF,0x048060AA,0x048060AA,0x02488055,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata5[16]={0x048060AA,0x06C8E0FF,0x048060AA,0x00000000,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata6[16]={0x02488055,0x06C8E0FF,0x048060AA,0x02488055,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata7[16]={0x02488055,0x06C8E0FF,0x06C8E0FF,0x02488055,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata8[16]={0x06C8E0FF,0x00000000,0x048060AA,0x00000000,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t wdata9[16]={0x06C8E0FF,0x06C8E0FF,0x06C8E0FF,0x02488055,0,0,0,0,0,0,0,0,0,0,0,0}; #endif EXTI_HandleTypeDef EXTI_Line13_Handle; GPIO_InitTypeDef GPIO_PC13_Handle; /****************************************************** ********************************* * Function: LCD_IRQHandler * Description: LCD Interrupt handler * Input : * Outpu : * Author: CWT Data: 2021ê *************************************************** *********************************/ void LCD_IRQHandler(void) { HAL_LCD_IRQHandler(lcdhandle); } /****************************************************** ********************************* * Function: DMA_IRQHandler * Description: DMA Interrupt handler * Input : * Outpu : * Author: CWT Data: 2021ê *************************************************** *********************************/ void DMA_IRQHandler(void) { HAL_DMA_IRQHandler(&DMA_CH1_Handle); } /****************************************************** ************************* * function: HAL_I2C_MspInit * Description: * input : hi2c : pointer to a I2C_HandleTypeDef structure that contains * the configuration information for I2C module *************************************************** ************************/ void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) { /* NOTE: This function should be modified by the user. */ /* For Example */ GPIO_InitTypeDef GPIO_Handle; /* I2C1 */ /* I2C2 */ if (hi2c->Instance == I2C2) { System_Module_Enable(EN_I2C2); System_Module_Enable(EN_GPIOCD); /* I2C2 SDA PortD Pin7 */ /* I2C2 SCL PortD Pin6 */ GPIO_Handle.Pin = GPIO_PIN_6 | GPIO_PIN_7; GPIO_Handle.Mode = GPIO_MODE_AF_PP; GPIO_Handle.Pull = GPIO_PULLUP; GPIO_Handle.Alternate = GPIO_FUNCTION_1; HAL_GPIO_Init(GPIOD, &GPIO_Handle); /* Clear Pending Interrupt */ NVIC_ClearPendingIRQ(I2C2_IRQn); /* Enable External Interrupt */ NVIC_EnableIRQ(I2C2_IRQn); } } /****************************************************** ************************* * function : I2C_Init * Description: I2C Initiation. * Input : * Outpu : * Author: ZK Data: 2022ê *************************************************** ************************/ void I2C_Init(void) { I2C_Handle.Instance = I2C2; I2C_Handle.Init.I2C_Mode = I2C_MODE_MASTER; I2C_Handle.Init.Tx_Auto_En = TX_AUTO_EN_ENABLE; I2C_Handle.Init.Clock_Speed = CLOCK_SPEED_STANDARD; I2C_Handle.Init.No_Stretch_Mode = NO_STRETCH_MODE_NOSTRETCH; HAL_I2C_Init(&I2C_Handle); } /****************************************************** ************************* * function: SHT30_Read_Result * Description: get SHT30 result * Input : * Outpu : * Author: ZK Data: 2022ê *************************************************** ************************/ void SHT30_Read_Result(uint8_t *sht30_data,float *getTempHum) { uint16_t tem,hum; float Temperature=0; float Humidity=0; tem = ((sht30_data[0]<<8) | sht30_data[1]);// hum = ((sht30_data[3]<<8) | sht30_data[4]);// /*×*/ Temperature= (175.0*(float)tem/65535.0-45.0) ;// T = -45 + 175 * tem / (2^16-1) Humidity= (100.0*(float)hum/65535.0);// RH = hum*100 / (2^16-1) // if((Temperature>=-20)&&(Temperature<=125)&&(Humidity>=0)&&(Humidity<=100))//íó // { // printfS("%6.2f*C %6.2f%%",Temperature,Humidity);//111.01*C 100.01%¨±2 // } getTempHum[0]=Temperature; getTempHum[1]=Humidity; } /****************************************************** ************************* * function : SHT30_Init * Description: SHT30 Initiation. * Input : * Outpu : * Author: ZK Data: 2022ê *************************************************** ************************/ void SHT30_Init(void) { I2C_Init(); SHT30_Reset(I2C_Handle); } /****************************************************** ********************************* * Function: LCD_Config * Description: Config LCD * Input : * Outpu : * Author: CWT Data: 2021ê *************************************************** *********************************/ void LCD_Config(void) { #if defined LCD_GDC04212 LCD_DisplayNum=LCD_DisplayNum_GDC04212; LCD_Init=LCD_Init_GDC04212; lcdhandle=&lcdhandle_GDC04212; #elif defined LCD_GDC03828 LCD_DisplayNum=LCD_DisplayNum_GDC003828; LCD_Init=LCD_Init_GDC03828; lcdhandle=&lcdhandle_GDC03828; #else LCD_DisplayNum=LCD_DisplayNum_YR1618A; LCD_Init=LCD_Init_YR1618A; lcdhandle=&lcdhandle_YR1618A; #endif LCD_Init(); LCD_BACK_LED(); } /****************************************************** ********************************* * Function: LCD_DisplayTest * Description: LCD DisplayTest * Input : * Outpu : * Author: ZK Data: 2022ê *************************************************** *********************************/ void LCD_DisplayTest() { while(1) { #ifdef LCD_YR1618A LCD_YR1618A_SelfDisplay(); #else for(uint16_t i=0;i<10000;i++) { LCD_DisplayNum(i); System_Delay_MS(100); } #endif } } void EXTI_IRQHandler(void) { HAL_EXTI_IRQHandler(&EXTI_Line13_Handle); } /****************************************************** ********************************* * Function: LCD_Sleep_DMA_Test * Description: LCD Display in sleep,use DMA to Reresh data to LCDRAM * Input : * Outpu : * Author: CWT Data: 2021ê *************************************************** *********************************/ void LCD_Sleep_DMA_Test()/*SleepDMA·*/ { memset(&DMA_CH1_Handle,0,sizeof(DMA_CH1_Handle));//Handle //DMA DMA_CH1_Handle.Instance = DMA_Channel0; DMA_CH1_Handle.Init.Data_Flow = DMA_DATA_FLOW_M2P; DMA_CH1_Handle.Init.Request_ID = REQ22_TIM3_CH2_LCDFRAME; DMA_CH1_Handle.Init.Source_Inc = DMA_SOURCE_ADDR_INCREASE_ENABLE; DMA_CH1_Handle.Init.Desination_Inc = DMA_DST_ADDR_INCREASE_ENABLE; DMA_CH1_Handle.Init.Source_Width = DMA_SRC_WIDTH_WORD; DMA_CH1_Handle.Init.Desination_Width = DMA_DST_WIDTH_WORD; HAL_DMA_Init(&DMA_CH1_Handle); DMA_CH1_Handle.Instance->CTRL &= ~DMA_CHANNEL_CTRL_ITC;//±±íê·òSleep°á±í1òúúSleep //DMA±í1 DMA_CH1_Handle_link1.SrcAddr = (uint32_t)(wdata1); DMA_CH1_Handle_link1.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link1.Next = &DMA_CH1_Handle_link2; DMA_CH1_Handle_link1.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í2 DMA_CH1_Handle_link2.SrcAddr = (uint32_t)(wdata2); DMA_CH1_Handle_link2.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link2.Next = &DMA_CH1_Handle_link3; DMA_CH1_Handle_link2.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í3 DMA_CH1_Handle_link3.SrcAddr = (uint32_t)(wdata3); DMA_CH1_Handle_link3.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link3.Next = &DMA_CH1_Handle_link4; DMA_CH1_Handle_link3.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í4 DMA_CH1_Handle_link4.SrcAddr = (uint32_t)(wdata4); DMA_CH1_Handle_link4.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link4.Next = &DMA_CH1_Handle_link5; DMA_CH1_Handle_link4.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í5 DMA_CH1_Handle_link5.SrcAddr = (uint32_t)(wdata5); DMA_CH1_Handle_link5.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link5.Next = &DMA_CH1_Handle_link6; DMA_CH1_Handle_link5.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í6 DMA_CH1_Handle_link6.SrcAddr = (uint32_t)(wdata6); DMA_CH1_Handle_link6.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link6.Next = &DMA_CH1_Handle_link7; DMA_CH1_Handle_link6.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í7 DMA_CH1_Handle_link7.SrcAddr = (uint32_t)(wdata7); DMA_CH1_Handle_link7.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link7.Next = &DMA_CH1_Handle_link8; DMA_CH1_Handle_link7.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í8 DMA_CH1_Handle_link8.SrcAddr = (uint32_t)(wdata8); DMA_CH1_Handle_link8.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link8.Next = &DMA_CH1_Handle_link9; DMA_CH1_Handle_link8.Control = DMA_CH1_Handle.Instance->CTRL | 16; //DMA±í9 DMA_CH1_Handle_link9.SrcAddr = (uint32_t)(wdata9); DMA_CH1_Handle_link9.DstAddr = (uint32_t)(&lcdhandle->Instance->LCD_RAM[0]); DMA_CH1_Handle_link9.Next = NULL; //×ó ±íêLCD ùèò±í1· DMA_CH1_Handle_link9.Control = DMA_CH1_Handle.Instance->CTRL | 16|(DMA_CHANNEL_CTRL_ITC); /*±íêèDMA±í·±í1 DMA*/ DMA_CH1_Handle.Instance->LLI =(uint32_t)&DMA_CH1_Handle_link1; __HAL_LINK_DMA((*lcdhandle), DMA_Handle, DMA_CH1_Handle); HAL_LCD_Start_DMA(lcdhandle, wdata1, 16); /*Sleep°è±SystickLCD·òSleep±*/ SysTick->CTRL = 0; lcdhandle->Instance->CR1 &= ~LCD_CR1_IE; System_Enter_Sleep_Mode(SLEEPENTRY_WFI);//sleep /*°áêSleep1234*/ LCD_DisplayNum(1234); } /****************************************************** ********************************* * Function : Exit_Config * Description : Exit_Config * Input : * Outpu : * Author: ZK Data: 2022ê *************************************************** *********************************/ void Exit_Config(void) { /* Initialization GPIO */ /* RTC access enable */ System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE); __HAL_RTC_PC13_SEL(0); // GPIO function __HAL_RTC_PC13_PULL_UP_ENABLE(); __HAL_RTC_PC13_DIGIT(); System_Module_Enable(EN_EXTI); /* Config EXTI */ EXTI_Line13_Handle.u32_Line = EXTI_LINE_13; EXTI_Line13_Handle.u32_Mode = EXTI_MODE_INTERRUPT; EXTI_Line13_Handle.u32_Trigger = EXTI_TRIGGER_FALLING; EXTI_Line13_Handle.u32_GPIOSel = EXTI_GPIOC; HAL_EXTI_SetConfigLine(&EXTI_Line13_Handle); } /****************************************************** ********************************* * Function: LCD_StopTest * Description: LCD Display in Stop * Input : * Outpu : * Author: CWT Data: 2021ê *************************************************** *********************************/ void LCD_StopTest()/*Stop*/ { LCD_DisplayNum(6666); Exit_Config(); HAL_EXTI_ClearAllPending(); System_Delay_MS(2000); System_Enter_Stop_Mode(STOPENTRY_WFI);//STOPé · LCD_DisplayNum(8888);/*Stopò8888*/ } /****************************************************** ********************************* * Function: LCD_Test * Description: LCD Test * Input : * Outpu : * Author: CWT Data: 2021ê *************************************************** *********************************/ void LCD_Test(enum_TEST_MODE_t fe_Mode) { switch (fe_Mode) { /* */ case TEST_Display_Normal: { LCD_DisplayTest(); } /* Stop the process */ case TEST_Dispaly_InStop: { LCD_StopTest(); while(1) { } } /* Sleep+DMA+*/ case TEST_Dispaly_Sleep_DMA: { LCD_Sleep_DMA_Test(); while(1) { } } default: break; } } /****************************************************** ********************************* * Function: Get_Touch_Key_Value * Description : get key value * Input : * Output : key value * Author: LWQ Data: 2022ê *************************************************** *********************************/ uint8_t Get_Touch_Key_Value(void) { static uint8_t key_flags = NO_KEY_DOWN; /* ·°ü°±ê± */ static uint32_t key_value = 0; uint8_t i=0, key_num = 0; uint32_t uwTouchBits = 0; uint32_t uwTouchBits_ref = 0; uint32_t uwkey_value = 0; uint8_t ucKey = 0; uwTouchBits = TK_GetPressRelaeseFlag(); uwTouchBits_ref = uwTouchBits; uwkey_value = key_value; for(i = 0; i < MAX_KEY_NUM; i++) { uwTouchBits &= (~key_value); if((uwTouchBits >> i) & 0x0001) { key_num++; } } if(key_flags == NO_KEY_DOWN) { if(key_num == 1) { key_flags = KEY_DOWN; } } else if((key_value & uwTouchBits) == 0) { if(key_value != uwTouchBits_ref) { key_flags = NO_KEY_DOWN; key_value = 0; } if(key_num == 1) { key_flags = OTHER_KEY_DOWN; } } if(key_flags != NO_KEY_DOWN) { if(key_num == 1 && (key_value & uwTouchBits) == 0) { for(i = 0; i < MAX_KEY_NUM; i++) { if((key_num == 1) && ((uwTouchBits >> i) & 0x0001))//°ü { if((uwkey_value & uwTouchBits_ref) == 0) { key_value = uwTouchBits; ucKey = i; printfS("TK_%d\r\n", i); } else { key_value = uwkey_value; } } } } } if(ucKey != 0)//·°¨§ { Beep_On(5); } return ucKey; } void SysTick_Callback(void) { if(gu8_time_count_free==0) { if(gu32_time_1s_cont==400) { gu8_time_count_free=2; gu32_time_1s_cont=0; } else if(gu32_time_1s_cont==200) { gu8_time_count_free=1; gu32_time_1s_cont++; } else { gu32_time_1s_cont++; } } } /****************************************************** ********************** * Filename : app.c * Description: app source file * Author(s) : xwl * version : V1.1 * Modify date : 2021-04-07 *************************************************** *********************/ #include "app.h" #define PWM_OUTPUT_CHANNEL1 TIM_CHANNEL_1 #define TIM_CLOCK_FREQ (8000000U) uint32_t g_period = 1; uint32_t g_duty = 50; TIM_HandleTypeDef TIM_Handler; /****************************************************** ********************************* * Function: TIM1_MSP_Pre_Init * Description: timer 1 initiation, includes clock, nvic * Input: htim, timer handler * Output : none * Author : xwl *************************************************** *********************************/ void TIM1_MSP_Pre_Init(TIM_HandleTypeDef * htim) { HAL_TIMER_MSP_Init(htim); } /****************************************************** ********************************* * Function: TIM1_MSP_Post_Init * Description: timer 1 gpio initiation, configure PC8 as TIMER1 CH1 * Input : none * Output : none * Author : xwl *************************************************** *********************************/ void TIM1_MSP_Post_Init(void) { GPIO_InitTypeDef gpio_init; gpio_init.Pin = GPIO_PIN_8; //TIM1_CH1 gpio_init.Mode = GPIO_MODE_AF_PP; gpio_init.Pull = GPIO_NOPULL; gpio_init.Alternate = GPIO_FUNCTION_2; HAL_GPIO_Init(GPIOC, &gpio_init); // PC8 } /****************************************************** ********************************* * Function: TIM1_Init * Description: timer 1 initiation, includes clock, io, configuration * Input : none * Output : none * Author : xwl *************************************************** *********************************/ void TIM1_Init(uint8_t period,uint8_t duty) { TIM_OC_InitTypeDef Tim_OC_Init_Para; 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; } TIM_Handler.Instance = TIM1; 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; if (timer_clock%TIM_CLOCK_FREQ > TIM_CLOCK_FREQ/2) { TIM_Handler.Init.Prescaler = TIM_Handler.Init.Prescaler + 1; } TIM_Handler.Init.Period = period*((TIM_CLOCK_FREQ/1000000)*10 - 1); // period = 10us TIM1_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 = (2*duty*TIM_Handler.Init.Period+50)/200; // duty cycle HAL_TIMER_Output_Config(TIM_Handler.Instance, &Tim_OC_Init_Para, PWM_OUTPUT_CHANNEL1); TIM1_MSP_Post_Init(); } void App_Test(void) { float ff_getTempHum[2]; uint16_t fu16_num_up, fu16_num_down; uint32_t fu32_Displayup[4]={0},fu32_Displaydown[4]={0},fu32_num_123567p[7]={0},fu32_num_col[2]={0},fu32_num_s=0; uint8_t fu8_Tkey_state = 0xff, fu8_Work_Mode=0; uint16_t fu16_set_num_up=0,fu16_set_num_down=0; uint8_t fu8_Hidden_point=0;// uint8_t ret = 0; LCD_Config(); SHT30_Init(); BUZZER_Init(); ret = TouchKey_Init(); if(ret) { printfS("TouchKey_Init is Fail!\r\n"); } else { printfS("TouchKey_Init is Success!\r\n"); } //LCD_YR1618A_SelfDisplay(); TIM1_Init(g_period,g_duty); HAL_TIM_PWM_Output_Start(TIM_Handler.Instance, PWM_OUTPUT_CHANNEL1); while(1) { fu8_Tkey_state = TK_TimerSacn_GetKeyVal();//Get_Touch_Key_Value(); if(fu8_Tkey_state != 0xFF) { Beep_On(5); #ifndef TKEY_WAVEFORM_OUTPUT printfS("TK_%d\r\n", fu8_Tkey_state); #endif } TKEY_Calibrate_Process(); if(fu8_Tkey_state == 11) { g_period++; } if(fu8_Tkey_state == 8) { if(g_period >=2 ) { g_period--; } } if(fu8_Tkey_state == 9) { g_duty++; if(g_duty >=100) { g_duty=100; } } if(fu8_Tkey_state == 7) { if(g_duty >=1) { g_duty--; } } if(fu8_Tkey_state != 0xFF) { HAL_TIM_PWM_Output_Stop(TIM_Handler.Instance, PWM_OUTPUT_CHANNEL1); TIM1_Init(g_period,g_duty); HAL_TIM_PWM_Output_Start(TIM_Handler.Instance, PWM_OUTPUT_CHANNEL1); } fu32_Displayup[0]=g_period/1000%10;//§,LCD1(×ó)--5 fu32_Displayup[1]=g_period/100%10;//°×,LCD2(×ó)---6 fu32_Displayup[2]=g_period/10%10;//,LCD3(×ó)----7 fu32_Displayup[3]=g_period/1%10;//,LCD4(×ó)-----8 fu32_Displaydown[0]=g_duty/1000%10;//§,LCD1(×ó)--5 fu32_Displaydown[1]=g_duty/100%10;//°×,LCD2(×ó)---6 fu32_Displaydown[2]=g_duty/10%10;//,LCD3(×ó)----7 fu32_Displaydown[3]=g_duty/1%10;//,LCD4(×ó)-----8 LCD_YR1618A_VIEW(fu32_Displayup,fu32_Displaydown,fu32_num_123567p,fu32_num_col,fu32_num_s); } } SummarizeBased on the official HAL library, rapid functional verification and development can be carried out, which is very efficient. From the test, the PWM output accuracy, cycle accuracy can reach less than 1%, and the duty cycle accuracy can reach less than 1%. Another BUG was found The upper four digits of the value 1 are displayed as 101, as shown in the picture above. There is a problem with the hundreds place, the simulator tracks the value fine, it can only be a display problem. This post is from Domestic Chip Exchange
Latest reply
Based on the official HAL library, rapid functional verification and development can be carried out, which is very efficient.
From the test, the PWM output accuracy, cycle accuracy can reach less than 1%, and the duty cycle accuracy can reach less than 1%.
The review includes screenshots of the oscilloscope and a comparison table, which is very detailed.
However, it would be more convincing if the brand of the oscilloscope could be indicated and whether it has been calibrated.
Details
Published on 2022-9-27 15:07
| ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
lugl4313820
Currently offline
|
2
Published on 2022-9-27 15:07
Only look at the author
This post is from Domestic Chip Exchange
| |
|
||
|
EEWorld Datasheet Technical Support
Webpage Maker 3 is a webpage maker developed by Macromedia. It consists of three softwares: DREAMWEAVER (webpage maker), ...
Top Ten Weird Pictures in the World: Eyes Deceiving the Brain. Do you understand? Is a column round or square? Where ...
I have done a project before, which has a weight detection function. I consulted a lot of information and finally loc ...
Received the X-NUCLEO-IKS01A3 sensor kit More images of the sensor suite Connecting X-NUCLEO-IKS01A3 using MicroP ...
1. Absolute value function (1) _abs() C code: int _abs(int src) Assembly: ABS function: Calculate the absolute va ...
This user guide mainly describes the basic instructions of the BOOT interface of the N32G45x series, N32G4FR series, and ...
This afternoon and evening, create a new project file in MounRiver Studio integrated development environment, compile an ...
This post was last edited by captz on 2022-4-25 09:53 Share the stories you saw recently A man was eating water chest ...
This post was last edited by jobszheng5 on 2023-5-11 15:13 In the ARM company's RISC instruction set Cortex-M3 series ...
The six communication protocols used in the Internet of Things include: Wi-Fi, RF, RFID, Bluetooth, and Near Field Commu ...
EEWorld
subscription
account
EEWorld
service
account
Automotive
development
circle
About Us Customer Service Contact Information Datasheet Sitemap LatestNews
Room 1530, Zhongguancun MOOC Times Building, Block B, 18 Zhongguancun Street, Haidian District, Beijing 100190, China Tel:(010)82350740 Postcode:100190