一、定时器计时启用:
配置内部时钟和开启定时器全局中断就可以了 时间单位标准一秒
HAL_TIM_Base_Start_IT(&htim2)
定时器计时停止
HAL_TIM_Base_Stop_IT(&htim2)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//中断
{
if(htim->Instance == TIM2)
{
}
}
二、pwm输出启用
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
pwm输出停止
HAL_TIM_PWM_Stop(&htimX, TIM_CHANNEL_Y);
三、pwm输入捕获
在hal库先配置好DMA及中断,解放cpu资源
HAL_TIM_IC_Start_DMA(&htim3,TIM_CHANNEL_1,tim_ic_buffer[0],64);
HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_1,tim_ic_buffer[1],64);
在数据处理时,容易少这两句s
tim_ic_val[0] = (int)((float)(1000.0f * 1000.0f) / (float)tim_ic_temp);
tim_ic_val[1] = (int)((float)(1000.0f * 1000.0f) / (float)tim_ic_temp2);
四、按键长按检测
if(key_down==3) if(Key_up==3) if(uwTick-key_tick>1000)
{
key_tick=uwTick;
}
key_up = ~key_val &(key_old ^ key_val);会影响key_up
五、怎么配置闪烁灯
六、计时定时器
七、改变频率而不改变占空比
八、各个数据的类型
adc_val是float
九、DMA的各个中断开启
ADC
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adc_buffer[0][0],30);
HAL_ADC_Start_DMA(&hadc2,(uint32_t*)&adc_buffer[1][0],30);

输入捕获
HAL_TIM_IC_Start_DMA(&htim3,TIM_CHANNEL_1,tim_ic_buffer[0],64);
HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_1,tim_ic_buffer[1],64);
PWM输出
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);


void tim2ch2_set_fre(uint32_t fre)
{
uint32_t tim2_clk=80000000;
uint32_t prescaler;
prescaler=tim2_clk/(fre*(TIM2->ARR +1))-1;
__HAL_TIM_SET_PRESCALER(&htim2,prescaler);
//触发更新
TIM2->EGR = TIM_EGR_UG;
}
void tim3ch2_set_fre(uint32_t fre)
{
uint32_t tim3_clk=80000000;
uint32_t prescaler;
prescaler=tim3_clk/(fre*(TIM3->ARR +1))-1;
__HAL_TIM_SET_PRESCALER(&htim3,prescaler);
//触发更新
TIM3->EGR = TIM_EGR_UG;
}
十、记得led与system的区别

一些函数的名称
1串口解析 atoi 字符串->整形
memcmp 判断是否一致 memcmp(usart_read_buffer,mima_zhen,sizeof(mima_zhen)
memcpy memcpy(mima_zhen,&usart_read_buffer[4],3);将后赋给前面
2定时器 HAL_TIM_Base_Start_IT(&htim1);
1万+

被折叠的 条评论
为什么被折叠?



