你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用CubMX和Proteus学习STM32单片机(九)------定时器中断

[复制链接]
STMCU小助手 发布时间:2022-11-16 16:07
项目简介
         利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。本项目利用CubMX创建一个32工程,用以实现定时器中断控制LED灯的状态转换的功能,并在Proteus中进行仿真验证。

硬件模块
        STM32F103R4

        LED

软件工具
        CubMX

        Proteus

        KEIL

电路连接图

56$HN0T{S(S_80T(~M@4763.png

工作流程
        首先,创建一个CubMX工程。这里选择的是STM32F103R4型号的单片机。下图是时钟树的设置,这个根据自己习惯设置就好,这里的时钟频率,也就是定时器时钟频率是8MHz.

3557PE_}FYE1OBP3N]X0H%X.png

        介绍定时器发生中断时间的计算方法:定时器时间=(Prescaler+1)X(Counter Period+1)/定时器时钟频率 单位:秒/s。

        然后,假如我们需要LED灯的状态每隔3s改变一次,已知定时器的时钟频率是8MHz,于是我们设置Prescaler为8000-1,Counter Period设置为3000-1。并设置自动重装载,具体如下图。

5]M0`@WA3VQZRM`GQNIJ.png

        然后使能中断

H9BJS3(XLVE49F$(130)1)T.png

        然后生成代码

FUB]UEZ{O2`(JNE~8N6S$OM.png

R3[K1YA\8ATC{J_8H)(M7.png

        在stm32f4xx__it.c文件中找到TIM2_IRQHandler函数,

1QV1[LCK~B$%R3(PM1Z77.png

        然后进入HAL_TIM_IRQHandler函数,在其中找到HAL_TIM_PeriodElapsedCallback函数,复制到main.c文件中重新编辑

X1]9CJWAL6`3G_07CT]7P%M.png

        然后在main函数中添加HAL_TIM_Base_Start_IT(&htim2);函数即可。

        接下来,创建一个Proteus工程。

Q@3B(W7[LKFFDBD0D~0$GSL.png

        开始调试,刚开始灯是亮的。

QDZ2XP{VF@[CMWLQBVV3N{6.png

        3秒之后,灯灭了

{G2{3Q[39_48M9S5@9EUOIR.png

        调试成功,验证可用。

程序代码

  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */

  5.   /* MCU Configuration--------------------------------------------------------*/

  6.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  7.   HAL_Init();

  8.   /* USER CODE BEGIN Init */

  9.   /* USER CODE END Init */

  10.   /* Configure the system clock */
  11.   SystemClock_Config();

  12.   /* USER CODE BEGIN SysInit */

  13.   /* USER CODE END SysInit */

  14.   /* Initialize all configured peripherals */
  15.   MX_GPIO_Init();
  16.   MX_TIM2_Init();

  17.         HAL_TIM_Base_Start_IT(&htim2);
  18.   /* USER CODE BEGIN 2 */

  19.   /* USER CODE END 2 */

  20.   /* Infinite loop */
  21.   /* USER CODE BEGIN WHILE */
  22.   while (1)
  23.   {
  24.     /* USER CODE END WHILE */

  25.     /* USER CODE BEGIN 3 */
  26.   }
  27.   /* USER CODE END 3 */
  28. }


  29. ......


  30. /* USER CODE BEGIN 4 */
  31. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  32. {
  33.         HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  34. }

  35. /* USER CODE END 4 */
复制代码


作者:jxjajl  bilibili

收藏 评论0 发布时间:2022-11-16 16:07

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版