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

基于STM32CubMX和Proteus——定时器中断

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

硬件模块
        STM32F103R4
        LED

软件工具
        CubMX
        Proteus
        KEIL

电路连接图

3IU)[MOR0J5[X8KJUUH5ZTT.png

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

}_U50LO%J_I_16AL_CQ%~56.png

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

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

6PIM(BK[4GH]T${Q5A@OG`6.png

        然后使能中断

_I~`}Z}7~P9$YCT`W0)EY5V.png

        然后生成代码



%QNQ)}DXFJ$R@F]X6BW5B6Q.png

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

2AKW)`C~U4WDON}V_$LS8TH.png

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

3]KIRF4NP{BQ{YO3}W2}3YE.png

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

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

N4KGTY96K~~~5PRZ384W1(K.png

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

D17`(KVJ@R2R_GZT9[6J5_Q.png

编辑
        3秒之后,灯灭了

%IO%1[MM@KCL6(4XGL_[6NN.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

J4V8_XGA9L0$V@IXQWT@5ZL.png
收藏 评论0 发布时间:2023-2-10 15:46

举报

0个回答

所属标签

相似分享

官网相关资源

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