工程文件下载链接,无需积分即可下载

这次代码直接在上次ADC代码上面进行修改,本次TIM 使用TIM6基础定时器

1.设置STM32CubeMX文件

(1).使能TIM6

(2).设置分频使一秒产生一次定时器中断 80 000 000/(8000 - 1)/    (1000 - 1)

(3).设置抢断优先级,使定时器能打断串口中断服务程序,保证在执行串口的时候可以延时

(4).生成keil工程文件

2.配置keil文件

(1).添加.c  .h文件,过程省略

(2).转移资源bsp_basic_tim6.c  bsp_basic_tim6.h文件里面的内容

TIM_HandleTypeDef htim6;/* TIM6 init function */
void MX_TIM6_Init(void)
{/* USER CODE BEGIN TIM6_Init 0 *//* USER CODE END TIM6_Init 0 */TIM_MasterConfigTypeDef sMasterConfig = {0};/* USER CODE BEGIN TIM6_Init 1 *//* USER CODE END TIM6_Init 1 */htim6.Instance = TIM6;htim6.Init.Prescaler = 7999;htim6.Init.CounterMode = TIM_COUNTERMODE_UP;htim6.Init.Period = 9999;htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim6) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK){Error_Handler();}/* USER CODE BEGIN TIM6_Init 2 *//* USER CODE END TIM6_Init 2 */}void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{if(tim_baseHandle->Instance==TIM6){/* USER CODE BEGIN TIM6_MspInit 0 *//* USER CODE END TIM6_MspInit 0 *//* TIM6 clock enable */__HAL_RCC_TIM6_CLK_ENABLE();/* TIM6 interrupt Init */HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 2, 0);HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);/* USER CODE BEGIN TIM6_MspInit 1 *//* USER CODE END TIM6_MspInit 1 */}
}
#include "main.h"/* USER CODE BEGIN Includes *//* USER CODE END Includes */extern TIM_HandleTypeDef htim6;/* USER CODE BEGIN Private defines *//* USER CODE END Private defines */void MX_TIM6_Init(void);

(3).去路径

#include "main.h"  ——》#include "stm32g4xx_hal.h" ——》#include "stm32g4xx_hal_conf.h"

打开定时器使能

(4).去资源里面,stm32g4xx_it.c,把定时器中断服务函数复制到工程相同位置

并在stm32g4xx_it.c里面添加#include "basic_tim6\bsp_basic_tim6.h"以加载要用到的变量

 (5).在这个路径里面找到定时器的中断服务函数

(6).在里面搜索

Update找到TIM Update event

找到

HAL_TIM_PeriodElapsedCallback(htim);

并且进入找到弱定义的这个函数

复制到主函数里面

(7).主函数里面初始化定时器 (8).初始化旁边初始化的时候调用一次中断,每次调用完中断函数,在初始化一次中断

#include "stdio.h"
#include "main.h"
#include "led\bsp_led.h"
#include "key\bsp_key.h"
#include "lcd\bsp_lcd.h"
#include "adc\bsp_adc.h"
#include "basic_tim6\bsp_basic_tim6.h"__IO uint32_t uwTick_key_set_point = 0;
unsigned char uckey_valu,uckey_old,uckey_down,uckey_up;__IO uint32_t uwTick_lcd_set_point = 0;
unsigned int i = 0;
unsigned char Lcd_Dis_String[22];void SystemClock_Config(void);
void KEY_Proc(void);
void LCD_Disp(void);int main(void)
{HAL_Init();SystemClock_Config();LED_Init();KEY_Init();LCD_Init();ADC1_Init();ADC2_Init();LCD_Clear(White);TIM6_Init();HAL_TIM_Base_Start_IT(&htim6);while (1){KEY_Proc();LCD_Disp();}}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{i++;HAL_TIM_Base_Start_IT(&htim6);}
void LCD_Disp(void)
{if (uwTick - uwTick_lcd_set_point < 200) return;uwTick_lcd_set_point = uwTick;i++;sprintf((char *)Lcd_Dis_String,"The time is %d",i);LCD_DisplayStringLine(Line0, Lcd_Dis_String);sprintf((char *)Lcd_Dis_String,"ADC1:%5.3f",getADC1()*3.3/4096);LCD_DisplayStringLine(Line1, Lcd_Dis_String);sprintf((char *)Lcd_Dis_String,"ADC2:%5.3f",getADC2()*3.3/4096);LCD_DisplayStringLine(Line2, Lcd_Dis_String);}void KEY_Proc(void)
{if (uwTick - uwTick_key_set_point < 200) return;uwTick_key_set_point = uwTick;uckey_valu = KEY_Scan();uckey_down = uckey_valu & (uckey_old^uckey_valu);uckey_up = ~uckey_valu & (uckey_old^uckey_valu);uckey_old = uckey_valu;if (uckey_down == 1){LED_Disp(0x11);}if (uckey_down == 2){LED_Disp(0xff);}if (uckey_down == 3){LED_Disp(0x44);}if (uckey_down == 4){LED_Disp(0x00);}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV3;RCC_OscInitStruct.PLL.PLLN = 20;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}void Error_Handler(void)
{__disable_irq();while (1){}}#ifdef  USE_FULL_ASSERTvoid assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

蓝桥杯嵌入式——TIM相关推荐

  1. #蓝桥杯嵌入式#TIM配置

    参考资料:       蓝桥杯嵌入式备赛手册 总目录:目录 timc.c 参考例程:Project->STM32F10x_StdPeriph_Examples->TIM->TimeB ...

  2. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→TIM→PWM

    文章目录 前言 PWM 1.配置元素以及配置步骤 2.编写代码 3.演示效果 总结 前言 前面我们以及学完了按键的单,双,长击写法,这其实都是归功于定时器TIM的计时功能,这篇文章讲述的是TIM的输出 ...

  3. 第九届蓝桥杯-嵌入式比赛体会与备赛经验

    原文地址:http://www.cnblogs.com/NickQ/p/8721317.html 说起蓝桥杯,相信很多电子类的学生,应该很熟悉了吧...上周日,我也去湖北工业大学参与了一下.说起这次经 ...

  4. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→I2C→M24C02

    文章目录 前言 I2C 1.原理图以及配置元素 2.CubeMx的配置步骤 3.生成工程 4.测试代码 5.演示效果 总结 前言 G4板载了一块M24C02(eeprom)和一块MCP4017(可编程 ...

  5. 蓝桥杯嵌入式——第十二届蓝桥杯嵌入式国赛

    蓝桥杯嵌入式--第十二届蓝桥杯嵌入式国赛 之前准备省赛的时候用的是旧版的STM32F103,从准备国赛开始就用新版STM32G431平台了,主要是想经过新版的准备学习一下HAL库以及CubeMX的使用 ...

  6. 蓝桥杯嵌入式类比赛经验分享

    第八届蓝桥杯大赛(嵌入式组) 蓝桥杯的嵌入式组是Stm32rbt6单片机的编程比赛,我想对于学习电子信息工程专业的同学这不是一个陌生的名词,如果你是电信专业的大四同学却没有听说过msp430或者stm ...

  7. 【蓝桥杯嵌入式】第六届省赛程序题项目代码及讲解

    文章目录 蓝桥杯嵌入式第六届省赛 介绍 配置 RTC配置 配置ADC 配置串口: LED和按键的配置 E2PROM 头文件 初始化 串口测试 LCD测试 RTC测试 ADC测试 按键和LED测试 E2 ...

  8. 蓝桥杯嵌入式(STM32G431RBT6)入门第四天——系统嘀嗒定时器(SysTick)|CSDN创作打卡

    和往常一样,先建立SysTick定时器练习文件夹,并在里面建立SysTick_test和SysTick两个子文件夹. STM32的通用定时器是通过一个可编程预分频器(Prescaler)驱动的16位自 ...

  9. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→DAC

    文章目录 前言 1.CubeMx的配置步骤 2.生成工程 3.测试代码 4.演示效果 总结 前言 前面我们配置了ADC模块,本节我们学习配置DAC模块. 1.CubeMx的配置步骤 修改之前的ADC的 ...

  10. 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→ADC

    文章目录 前言 ADC 1.原理图以及配置元素 2.CubeMx的配置步骤 3.生成工程 4.测试代码 5.演示效果 总结 前言 G4板载了四个电位器,其中左边两个是电压采集用的,本篇文章将讲述如何单 ...

最新文章

  1. 设置commit 提交模板
  2. 使用javascript让项目支持热插拔
  3. ASSERT()是干什么用的
  4. 网络通信中TCP出现的黏包以及解决方法 socket 模拟黏包
  5. python choose语句作用_理解闭包是如何与变量作用域相互影响的
  6. 人工智障学习笔记——深度学习(3)递归神经网络
  7. http://java.sun.com/jsp/jstl/core cannot be resolved(含有jstl1.2jar包网盘)
  8. 计算机应用培训课程安排表,计算机培训教学计划
  9. 一些简单的git命令及操作
  10. 按键手机java下载_经典按键java手机游戏
  11. 关于数字化营销,最通俗的讲解在这里
  12. matplotlib作图示例——阻尼衰减曲线、XRD数据绘图、三角函数绘图、超越函数绘图、正态分布随机数(插值多项式)
  13. Linux中实现定时任务详解
  14. 团队springboot基础镜像选择思考
  15. 温莎计算机应用硕士是针对国际学生的吗,专业推荐 | 加拿大留学,温莎大学英语计算机专业了解一下...
  16. JOYMY九脉换弹电子烟评测
  17. CSDN换头像的方法
  18. 满口春日清爽 书亦烧仙草刺梨新品上市
  19. python 添加图片_python 图片读取、添加等
  20. 谷歌地图-Google Map

热门文章

  1. 手机APP/小程序微模卡源码下载,开源开心免费开心
  2. Multisim元件库介绍以及中英文全面解析
  3. Vue3.0官方文档
  4. tkmybatis能连接oracle吗,《放弃Mybatis使用tkMybatis》
  5. 微信小程序服务器布置轮播图,微信小程序自定义轮播图
  6. iconv 判断字符编码_iconv函数文字编码格式转换
  7. 浙大PAT练习题1010
  8. Unity粒子特效UI层级问题
  9. 为什么Lottie动画无法使用AVVideoCompositionCoreAnimationTool导出
  10. 关于计算机用途的ppt,计算机组成与用途课件.ppt