单片机
返回首页

stm32cube配置周期任务

2025-03-10 来源:jianshu

一,前言

我做同样的事喜欢用不同的方法,之前刚刚写完一个国产芯片的最小工程代码,套路都是一样的。所以今天我玩自己的stm32F407开发板就不想再手写代码了,期望用工具生成低代码的方式来实现最小工程led闪烁。

二,stm32cube入门

之前就用过,但是有写忘记了。晚上稍微看了下又想起来了。至于系统时钟,外设时钟配置为多少,timer要如何分频的基本上单片机都是类似的,找到对应章节看下就知道了了。我的配置如下time外设使用的时钟是42M APB1时钟


image.png


Timer6的配置如下1ms中断。timer7同样思路配置为5ms中断。


image.png


打开中断,中断优先级在nvic中配置,我做的是可抢占的2个周期任务

image.png


三,遇到的问题总结

要手工将启动文件的路径添加到工程中,否则编译报错'error: L6236E: No section matches selector - no section to be FIRST/LAST.'


手写代码要放入USER CODE BEGIN的注释内,否则重新生成代码会被覆盖。


一开始无法进入中断,看了代码发现没有使能time中断初始化,后来看到有api及网上搜索下了,原来是要手工添加的。我手动添加的code如下


//放在初始化while前面

    HAL_TIM_Base_Start_IT(&htim6);

    HAL_TIM_Base_Start_IT(&htim7);

//放在main函数上面unsigned short cnt1ms=0u;unsigned short cnt5ms=0u;void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){

    if (htim->Instance == htim6.Instance)

    {

            if(cnt1ms++>=500)  /* 500ms flash */

            {

                cnt1ms=0;

                HAL_GPIO_TogglePin(GPIOF, LED0_Pin);

            }

    }

        else if (htim->Instance == htim7.Instance)

        {

                if(cnt5ms++>=100)  /* 500ms flash */

                {

                    cnt5ms=0;

                    HAL_GPIO_TogglePin(GPIOF, LED1_Pin);

                }

        }

        else

        {

        }   }


四,小结

为什么我开始用低代码工具了呢!因为我不想重复劳动了。做个最小工程就像看小家电说明书一样去看spec,每个厂家寄存器不同,但是设计思路是雷同的,我说的重复劳动就是这个雷同的内容我比较熟悉,所以不想重复劳动。既然是业余时间玩,就玩个不同的,所以今晚就决定用工具了。真的是分分钟搞定,我连寄存器都不用看了,仅快速看了timer和rcc章节的原理就完成了配置,哈哈~



进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 设计汽车集群电源

  • 6晶体管H桥

  • USB自供电声卡

  • AVR LCD温度计—LM35

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

    相关电子头条文章