STM32--STM32CubeMX的Timer3定时1ms功能HAL库操作

2023-11-09

一. STM32CubeMX的设置

① 时钟源的选择【Crystal/Ceramic Resonator】

② 调试方法选择【Serial Wire】

③ 时钟输入为40MHz

④ Timer3的参数设置

⑤ 使能Timer3的中断

点击【Generate Code】生成Keil5的代码工程。

二. 编写Keil5 代码

【tim.c】

/* USER CODE BEGIN 0 */
#include "gpio.h"
/* USER CODE END 0 */


/* USER CODE BEGIN 1 */

/*!
@Brief
	Timer3 callback function
@Param
	htim 					[Timer object]
@Return
	null
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
		static uint16_t TimerCount = 0;

		TimerCount++;
	
		//static unsigned char ledState = 0;
    if (htim == (&htim3))
    {
			//User processing function
			
			if(TimerCount == 1000)
			{
				HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
				TimerCount = 0;
			}			
    }
}

/* USER CODE END 1 */

【gpio.c】

/* USER CODE BEGIN 2 */

/*!
@Brief
	Config the GPIO.
@Param
	PIN_PORT		 	[The port of the PIN]
	PIN_Number		[The PIN number]
@Return
	null
*/
void GPIO_Config(GPIO_TypeDef *PIN_PORT, uint16_t PIN_Number)
{
	GPIO_InitTypeDef GPIO_InitStruct;			   //Define the GPIO_InitTypeDef structure 
	GPIO_InitStruct.Pin = PIN_Number;			   //Define the pin
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;		//Push-Pull output
	GPIO_InitStruct.Pull = GPIO_PULLUP;				//PULL-up mode
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;	//The pin rate is high speed
	HAL_GPIO_Init(PIN_PORT, &GPIO_InitStruct);
}

/*!
@Brief
	Config the user GPIO define.
@Param
	null
@Return
	null
*/
void GPIOUserInit(void)
{
	GPIO_Config(LED2_GPIO_PORT, LED2_PIN);
}

/* USER CODE END 2 */

【gpio.h】

/* USER CODE BEGIN Private defines */
#define LED2_PIN                           GPIO_PIN_5
#define LED2_GPIO_PORT                     GPIOA

#define GPIO_PIN_HIGH					    0x01
#define GPIO_PIN_LOW					    0x00
/* USER CODE END Private defines */

【main.c】

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
	uint8_t  Data[5] = {1, 2, 3, 4, 5};  //test code
	uint16_t CanID = 0x001;
	uint16_t usPWD_Duty = 0;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

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

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  //MX_CAN1_Init();
  MX_ADC1_Init();
  MX_TIM2_Init();
  MX_USART2_UART_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
	
	/**Enable timer3**/
	HAL_TIM_Base_Start_IT(&htim3);
	/**Initialize CAN and filter and start the CAN**/
	//CAN_User_Init(&hcan1);
	
	/**GPIO user config LED**/
	GPIOUserInit();

	printf("Hello World\r\n");
	
	//HAL_UART_Receive_IT(&huart2, (uint8_t *)g_ucUSART_RecvBuffer, 1);
	
	printf("Hello World2\r\n");
	
	/**Start PWM Timer2Channel1**/
	//verify the PWM function
	//USER_TIM_PWM_OpenTim2Ch1();

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {	

  }
  /* USER CODE END 3 */
}

主要添加如下代码

HAL_TIM_Base_Start_IT() : 使能Timer

GPIOUserInit() : 初始化用户的GPIO

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32--STM32CubeMX的Timer3定时1ms功能HAL库操作 的相关文章

  • 如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

    我正在尝试从 Cortex M3 处理器 STM32 上的 RAM 执行函数 该函数会擦除并重写内部闪存 所以我肯定需要在 RAM 中 但我该怎么做呢 我尝试过的是 使用 memcpy 将函数复制到 RAM 中的字节数组 检查它是否正确对齐
  • 处理器指令周期执行时间

    我的猜测是 no operation 内在 ARM 指令应花费 1 168 MHz 来执行 前提是每个NOP在一个时钟周期内执行 我想通过文档验证这一点 有关处理器指令周期执行时间的信息是否有标准位置 我试图确定 STM32f407IGh6
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • 无法使用 OpenOCD 找到脚本文件

    我正在尝试按照本教程将 OpenOCD 与我的 ST 发现板一起使用 https japaric github io discovery README html https japaric github io discovery READM
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板

随机推荐

  • element-plus中的ElMessage消息提示 执行了但是没有弹出提示

    报错原因及解决 引入了element plus 并没有引入css文件 所以导致了样式的缺失 只需要在main js文件中添加如下语句即可 import element plus dist index css 如果还是没有效果记得重启一下项目
  • 黑客学习笔记(自学)

    一 首先 什么是黑客 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手 现阶段黑客所需要掌握的远远不止这些 二 为什么要学习黑客技术 其实 网络信息空间安全已经成为海陆空之外的第四大战场 除了国与国之间的博弈 国内企业与企业间也有显著的明争暗
  • 如何快速准备大厂秋招面试中的算法

    如何快速准备大厂秋招面试中的算法 数据结构 1 栈 1 1 栈的概述 1 2 栈的常规操作 1 3 用js封装栈 1 4 栈的应用 2 队列 2 1 队列的概述 2 2 队列的常规操作 2 3 用js封装队列 2 4 队列的应用 3 链表
  • FreeRTOS学习笔记6(任务通知)

    1 任务通知函数及其知识点的介绍 下面是任务通知得一些特点 1 我们使用队列 信号量 事件组等等方法时 并不知道对方是谁 使用任务通知时 可以明确指定 通 知哪个任务 2 使用任务通知时 任务结构体TCB中就包含了内部对象 可以直接接收别人
  • MacbookPro安装前端开发环境的爬坑之旅

    文章目录 前言 一 MacbookPro的系统认知 二 强大的触控板 16种姿势带你飞 1 熟悉触控板 2 熟悉怎样下载APP 3 开始前端环境的搭建 总结 前言 2021年1月26日 一个前端开发小菜鸟拿到人生第一台MacbookPro的
  • 4.2 类

    类 类声明 类体 变量 成员变量 实例变量和类变量 局部变量 方法里面声明的变量 4 2 1类声明 类声明 class 类名 public class People 公共类 public class People String name i
  • Java .io_java IO

    java IO 主要内容 java io File类的使用 IO原理及流的分类 文件流 FileInputStream FileOutputStream FileReader FileWriter 缓冲流 BufferedInputStre
  • Linux十大常用命令

    1 gt 查看文件信息 ls ls是英文单词list的简写 其功能为列出目录的内容 是用户最常用的命令之一 它类似于DOS下的dir命令 Linux文件或者目录名称最长可以有265个字符 代表当前目录 代表上一级目录 以 开头的文件为隐藏文
  • 机器视觉之医学诊断应用

    https www toutiao com a6668252530897584644 随着药品和医疗器械安全性问题重要性的不断提升 越来越多的生产厂商将机器视觉技术引入实际生产中来 以达到提高生产效率 加强产品质量保障的目的 同样 在医疗系
  • Windows环境安装redis-dump

    安装msys2 x86 64 20190524 exe http repo msys2 org distrib x86 64 msys2 x86 64 20190524 exe rubyinstaller devkit 2 7 1 1 x6
  • CSS样式修改的一些技巧

    感觉自己对页面太差了 很多小问题不了解 是时候加强一下这方面 把最近一个小需求 总结一下 自己也欠了好多学习博客补一下 另外这个博客是来自于自己平时学习的总结和看法 基本是原创或者自己看到一些结合了自己的理解 已经有了一些文章 借用了 我的
  • 重启c语言—两个有序链表序列的交集

    7 1 两个有序链表序列的交集 20分 已知两个非降序链表序列S1与S2 设计函数构造出S1与S2的交集新链表S3 输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔
  • 华为OD机试 - 选修课(Java & JS & Python)

    题目描述 给定一个元素类型为小写字符串的数组 请计算两个没有相同字符的元素长度乘积的最大值 如果没有符合条件的两个元素 返回0 输入描述 第一行为第一门选修课学生的成绩 第二行为第二门选修课学生的成绩 每行数据中学生之间以英文分号分隔 每个
  • 汇编笔记

    更新于20190929 1 Intel和AT T汇编 参数是反的 AT T寄存器前加 常量前加 Intel mov rax rcx rcx gt rax mov cl 2 对应AT T movq rcx rax rcx gt rax mov
  • RHEL/centos8.0离线安装n卡驱动,cuda10.1,cudnn7.5,anaconda3,pycharm以及mmdeection和simpledet的搭建

    我最近在两台RHEL8 0的服务器装了这些玩意 特此记录一下 1 离线安装nvidia driver cuda10 1 cudnn7 5 关键因素 显卡型号 Quadro P4000 系统 RHEL 8 0 用 cat etc redhat
  • IPv4与ipv6联系

    IPv4又称互联网通信协议第四版 是网际协议开发过程中的第四个修订版本 也是此协议第一个被广泛部署的版本 但是2019年11月26日 全球所有43亿个IPv4地址已分配完毕 IPV6是互联网工程任务组设计的用于替代IPv4的下一代IP协议
  • Java高级程序设计_JAVA高级程序设计

    恢复内容开始 import java awt import java awt event ActionEvent import java awt event ActionListener import java awt event Mous
  • 12个C语言必背实例

    C语言实例第01期 十进制数转换二进制数 实例代码 include stdio h int main int m n k 定义变量 int a 16 0 printf 请输入一个0 32767之间的数字 n scanf d n printf
  • ImageNet零样本准确率首次超过80%,地表最强开源CLIP模型更新

    关注公众号 发现CV技术之美 本文转自新智元 编辑LRS 开源模型OpenCLIP达成ImageNet里程碑成就 虽然ImageNet早已完成历史使命 但其在计算机视觉领域仍然是一个关键的数据集 2016年 在ImageNet上训练后的分类
  • STM32--STM32CubeMX的Timer3定时1ms功能HAL库操作

    一 STM32CubeMX的设置 时钟源的选择 Crystal Ceramic Resonator 调试方法选择 Serial Wire 时钟输入为40MHz Timer3的参数设置 使能Timer3的中断 点击 Generate Code