外部时钟,主频64M
定时器1 通道1发出PWM波 频率1K
定时器2 通道1输入捕获,上升沿触发
串口
/* USER CODE BEGIN 0 */
uint32_t time_up_num=0;//上升沿计数
float time_frequency;//频率
/* USER CODE END 0 */
初始换打开定时器
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 300);
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);//函数用于使能定时器某一通道的输入捕获功能,并使能相应的中断
HAL_Delay(100);
/* USER CODE END 2 */
回调函数
/* USER CODE BEGIN 4 */
// 捕获中断回调函数,每次捕获到信号就会进入这个回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
// 判断是否是定时器2的外部捕获口1
if(htim->Instance == TIM2)
{
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1 )
{
time_up_num = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1); // 读取捕获计数,这个时间即为上升沿持续的时间
__HAL_TIM_SET_COUNTER(&htim2, 0); // 计数清零,从头开始计
}
}
}
/* USER CODE END 4 */
计算频率打印,若是想改变频率可设定定时器的计数
__HAL_TIM_SET_AUTORELOAD(&htim1, 499);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
time_frequency=1000000/time_up_num;//频率
printf("frequency=%.2frn",time_frequency);
HAL_Delay(500);
// __HAL_TIM_SET_AUTORELOAD(&htim1, 499);
}
前两个是频率为1KHz,后面修改了PWM的频率,即频率为2KHz。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 开源赋能 普惠未来|京东集团寄语2023开放原子全球开源峰会
京东集团是一家领先的技术驱动的电商公司并正转型为领先的以供应链为基础的技术与服务企业。其业务涵盖零售、科技、物流、健康、产发、工业、自有品牌、保险和国际等领域。京东以“有责任的供应链”为依托,持续推进“链网融合”,实现了货网、仓网和云网的“三网通”,不仅保障自…