RTC
安装第十五届软件之后
系统配置时钟不在是写在模块代码而是写在了主函数里边,重新配置之后需要进入主函数修改时钟
然后就是固定使用binary模式避免出现一些其他的问题
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1
|RCC_PERIPHCLK_ADC12;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_PLL;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_HSE_DIV32;
ADC
1.错误分析
使用采集函数式应该在主函数使其运行,不然无法获得数据
while (1)
{
collect_proc();
led_proc();
key_proc();
lcd_proc();
uart_proc();
}
2.校准分析
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
3.adc中值滤波算法
uint8_t adc_num;
float sum_adc;
float average_adc;
///adc中值滤波算法
for(adc_num = 0;adc_num<=9;adc_num++)
{
sum_adc = ((float)getadc1();
}
sum_adc /= 4096;
sum_adc *= 3.3;
average_adc = sun_adc/10;//经过中值滤波得到的adc的值
sum_adc = 0;//将值取出之后应该立即置零,否则下次累加会在此基础上累加
UART
延时就是进入串口发送间隔时间
TIM
1.Pwm输出比较
//
HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);//PA6 1000Hz占空比百分之四十的PWM波形
HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);//PA7 200 Hz 占空比百分之十
//修改相应频率
__HAL_TIM_SET_AUTORELOAD(&htim17, 999);//PA7(黄色)修改评率为一千赫兹
//修改相应的占空比
__HAL_TIM_SET_COMPARE(&htim16,TIM_CHANNEL_1,500);//修改PA6占空比为百分之五十
__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,600);//修改占空比为百分之六十
短按,长按按键
ucKey_Val = Key_Scan();
unKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val); //下降
ucKey_Up = ~ucKey_Val & (ucKey_Old ^ ucKey_Val);
ucKey_Old = ucKey_Val;
__IO uint32_t uwTick_key_duang_chang = 0;//定义打点值
if(uckye_down)//检测有按键按下,开启计时
{
uwTick_key_duang_chang = uwTick;
}
if((uwTick - uwTick_key_duang_chang) < 800)//小于八百毫秒判定为短按
{
switch(uckey_up)
{
case 1://如果B1短按
ucled = 0x88;//点亮led
break;
}
}
else
{
switch(uckey_value)
{
case 1://如果B1长按
ucled = 0x00;//熄灭led灯
break;
}
}