struct keys
{
unsigned char judge_sta;
bool key_sta;
bool single_flag;
bool long_flag;
unsigned int key_count;
};
struct keys key[4] = {0,0,0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim -> Instance == TIM4)
{
key[0].key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);
key[1].key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);
key[2].key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);
key[3].key_sta = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
for(int i =0;i<4;i++)
{
switch(key[i].judge_sta)
{
case 0:
{
if(key[i].key_sta == 0)
{
key[i].judge_sta =1;
key[i].key_count = 0;
}
}
break;
case 1:
{
if(key[i].key_sta == 0)
{
key[i].judge_sta = 2;
}
else
{
key[i].judge_sta = 0;
}
}
break;
case 2:
{
if(key[i].key_sta == 1)
{
key[i].judge_sta = 0;
if(key[i].key_count < 70)
{
key[i].single_flag = 1;
}
}
else
{
key[i].key_count++;
if(key[i].key_count == 200)
{
key[i].long_flag = 1;
}
}
}
break;
}
}
}
}
HAL_TIM_Base_Start_IT(&htim3);
//LED
void led_disp(unsigned char led_sta)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, led_sta<<8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
unsigned led_num;
void led_proc(void)
{
if(view == 0)
{
led_num |= 0x01;
}
else
{
led_num &= ~0x01;
}
led_disp(led_num);
}
//LCD
char temp[30];
sprintf(temp, "hello");
LCD_DisplayStringLine(Line0, (uint8_t*)temp);
//PWM输出
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
void pwm_proc(void)
{
__HAL_TIM_SetAutoreload(&htim2, 249);
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2, pwm_duty );
}
//PWM输入捕获
HAL_TIM_IC_Start_IT(&htim17, TIM_CHANNEL_1);
unsigned int ccr1_val;
unsigned int freq;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim ->Instance == TIM17)
{
ccr1_val = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
__HAL_TIM_SetCounter(htim, 0);
freq = (80000000/80)/ccr1_val;
HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_1);
}
}
//ADC
uint16_t dac_value;
float value_r37;
void adc_proc(void)
{
HAL_ADC_Start(&hadc2);
dac_value = HAL_ADC_GetValue(&hadc2);
value_r37 = dac_value*3.3/4096;
}
//I2C
unsigned char eeprom_read(unsigned char addr)
{
unsigned char dat;
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(addr);
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
dat = I2CReceiveByte();
I2CWaitAck();
I2CStop();
return dat;
}
void eeprom_write(unsigned char addr, unsigned char dat)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(addr);
I2CWaitAck();
I2CSendByte(dat);
I2CWaitAck();
I2CStop();
}
//串口发 记得开usb lib
int fputc(int ch, FILE*f)
{
HAL_UART_Transmit(&huart1,(unsigned char*)&ch, 1, 50 );
return ch;
}
串口接收
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart1, uart_buf, 1);
if(uart_buf[0] == '0')
{
printf("world");
}
}
//串口接收合法性判断
bool rx_flag = 0;
void uart_proc(void)
{
if(uwTick - uartTick < 50)return;
uartTick = uwTick;
if(rx_cnt>0 && rx_flag == 0)
{
printf("no");
}
rx_flag = 0;
rx_cnt = 0;
memset(rx_buf, '\0', sizeof(rx_buf));
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart1, uart_buf, 1);
uartTick = uwTick;
rx_buf[rx_cnt++] = uart_buf[0];
if(rx_cnt == 7)
{
rx_flag = 1;
sprintf(temp, " OK" );
LCD_DisplayStringLine(Line3, (uint8_t*)temp);
rx_cnt = 0;
printf("hello");
}
}