【stm32/CubeMX、HAL库】嵌入式实验六:定时器(3)|外部脉冲计数

参考:

【【正点原子】手把手教你学STM32CubeIDE开发】 https://www.bilibili.com/video/BV1Wp42127Cx/?p=13&share_source=copy_web&vd_source=9332b8fc5ea8d349a54c3989f6189fd3

嵌入式系统基础与实践》刘黎明等编著,第九章定时器,PWM从P289开始。

【【STM32教程】入门教程(基于HAL库+CubeMX+MDK-ARM)】 https://www.bilibili.com/video/BV1y7411m7gg/?share_source=copy_web&vd_source=9332b8fc5ea8d349a54c3989f6189fd3

定时器引脚映射

STM32F103定时器复用功能映射及其通道_stm32定时器通道复用-CSDN博客

参看上面的文章或者查看手册(8.3.7)。

实验内容

3、外部脉冲计数设计。 设计计数器,对外部脉冲(开发板上 PIC 单片机提供的脉冲信号)进行计数,并在 数码管上实时显示计数值。

提供信号的外部电路(TEST引脚处,可输出1khz,2khz等多种频率):

使用定时器2进行外部脉冲计数,使用的引脚为PA0

cubeMX配置如下(由于频率过快,计数值设为1000-1,计1000次才真正记一次数):

 

硬件连接:用跳线短接 PA0和TEST输出引脚。

代码编写同按键外部中断的写法大同小异:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

/*定时器更新中断回调函数

1.该函数由定时器中断通用处理函数 HAL_TIM_IRQHandler 调用,完成所 有定时器的更新中 断的任务处理

2.函数内部需要根据定时器句柄的实例来判断是哪一个定时器产生的本次更 新中断

3.函数由用户根据具体的处理任务编写 */

uint8_t flag=0;
 int res=0;
uint8_t table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40 };//10表示'-'
uint8_t s[]={0,0,0,0,0,0,0,0};


void write_byte(uint8_t date){
    unsigned char i;
	for(i=0;i<8;i++){
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,(date>>(7-i))&0x01);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,1);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,0);
	}
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,1);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,0);
 
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	  
  if(htim->Instance==htim2.Instance){
		//int cntt=__HAL_TIM_GET_COUNTER(&htim2);测试用,取出计数寄存器的值
	
	 res=res+1;
		flag=1;
		
	}
}

主函数中启动中断 

  HAL_TIM_Base_Start_IT(&htim2);

 while循环,只显示了计数值的末两位

 /* USER CODE BEGIN 3 */
		if(flag==1){
		   flag=0;
			s[7]=res%10;
	s[6]=res/10%10;
		}
		
		for(int i=8;i<16;i++){
		write_byte(table[s[15-i]]);
		HAL_GPIO_WritePin(GPIOF,0x01<<i,0);
		HAL_Delay(1);
		HAL_GPIO_WritePin(GPIOF,0x01<<i,1);
		}
		
		//HAL_Delay(1000);
		 
  }
  /* USER CODE END 3 */

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
嵌入式系统设计是指将计算机系统集成到其他设备或系统中,以实现特定功能。而基于STM32CubeMXHAL库嵌入式系统设计是指利用ST公司的STM32系列微控制器,结合STM32CubeMX工具和HAL库(Hardware Abstraction Layer),进行软硬件设计和开发的过程。 STM32CubeMX是ST公司推出的一款嵌入式系统设计工具,它提供了图形化的界面,可以帮助开发者快速配置STM32微控制器的引脚、时钟、外设等参数,生成初始化代码和项目文件,使整个开发过程更加简化和快捷。 HAL库STM32系列微控制器的硬件抽象层库,提供了一组封装了底层硬件操作的API接口,使开发者能够更加方便地进行外设控制和数据处理等操作。开发者可以根据具体的需求,选择需要的API接口,编写相应的代码,完成对硬件的控制和操作。 在使用STM32CubeMXHAL库进行嵌入式系统设计时,可以通过STM32CubeMX工具进行硬件的初始化和配置,生成相应的代码和项目文件。然后,在IDE(集成开发环境)中使用HAL库提供的API接口,编写代码进行软件的开发和应用程序的编写。通过这种方式,开发者可以在短时间内快速完成嵌入式系统设计,提高开发效率和产品质量。 总而言之,基于STM32CubeMXHAL库嵌入式系统设计提供了一种快速、简化的嵌入式软硬件开发方法,使开发者能够更加高效地进行嵌入式应用的设计与开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guts350

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值