/* TIM6 init function */
void MX_TIM6_Init(void)
{TIM_MasterConfigTypeDef sMasterConfig = {0};
//72M 就是72000000 HZ 分7200*10 就是1000HZ 那么周期是10-3s也就是1MShtim6.Instance = TIM6;htim6.Init.Prescaler = 7200-1;htim6.Init.CounterMode = TIM_COUNTERMODE_UP;htim6.Init.Period = 10-1;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();}}

然后中断呢?

不看IT直接用回调

HAL_TIM_Base_Start_IT(&htim6);
也就是3步搞定


static int cnt=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM6){if(++cnt == 1000){cnt=0;printf("1S\r\n");}}
}

可以看1S出书一次

+++++++++继续+++++++++

上面3步很基础 开始高级的 增加一个模块GTIMER.C

操作链表

第一步 timer_isr 放到上面1S执行一次

第二部可以用了

char timerid=0;
void timerpaly(void)
{printf("%s\r\n",__FUNCTION__);
}
void stop_timer_callback( void ) {timer.stop(timerid);}
void start_timer_callback( void ){timer.start(timerid);}
void creat_timer_paly( void )
{static time_type T;timerid = timer.creat(&T,3000 , 1 ,timerpaly );//3000代表多少个时基现在1MS一次那就是3S执行一次//1代表立刻开启 0就是只是创建 现在是关闭的 需要后面再开启
}static int cnt=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM6){timer_isr();if(++cnt == 10000){printf("10S\r\n");stop_timer_callback();}}
}

每3S执行一次  后面被定时器关闭掉!

也就是————————1——————1————————这样的在瞬间执行一次函数

++++++++++++++++继续++++++++++++++

做一个AAAAAAAAAAABBBBBBBBBBBBBB

这样样子的闪烁函数 它是一次性的 做完就结束

第一步 需要包含模块

#ifndef _BASETwinkle_H_
#define _BASETwinkle_H_#include <stdio.h>//printf
#include <string.h>//stpcpy
#include <stdint.h>//typedef   signed          char int8_t;
#include <ctype.h> //toupper
#include <stdlib.h>
#include <stdbool.h>
#include <stddef.h>//负责#define NULL 0typedef void (*fc)(void);//节点的结构体
typedef struct
{volatile uint8_t openFlag;//节点功能开关-int              setcnt;//设定的次数int           realCnt;//实际的次数uint32_t         RTime;//实际的计数值uint32_t         ATime;//设定的A计数值uint32_t         BTime;//设定的B计数值fc               funA;//[0-A之间的函数]fc               funB;//[A-B之间的函数]
}twinkleType;//操作节点的函数的结构体
typedef struct
{void (*set)( void *pnode,uint8_t enable,uint8_t Cnt , uint32_t ATime ,uint32_t BTime,fc Afun,fc Bfun);void (*isr)( void *pnode );
}twinklefunctionType;extern twinklefunctionType twfunc;//给上层的接口
typedef struct
{void (*write)       (uint8_t id,uint8_t cnt);
}twapp_type;#endif#include "basetwinkle.h"//使用说明:本模块在最底层 仅仅给LED BEEP这样的APP对接 上面的LED BEEP在网上对接
//这里放置了twinkleType twled;在上层中初始化
//不需要调用任何//对节点的实例化 也就是赋值
void twinkle_set(void *pp ,uint8_t enable,uint8_t Cnt , uint32_t ATime ,uint32_t BTime,fc Afun,fc Bfun)
{twinkleType* p=(twinkleType *)pp;if(p==NULL)return;p->setcnt = Cnt;p->realCnt = 0;p->RTime = 0;p->ATime = ATime;p->BTime = BTime;p->funA = Afun;p->funB = Bfun;   p->openFlag = enable;
}void twinkle_timer_isr( void *pp )
{twinkleType * p=(twinkleType *)pp;if(p==NULL) return;if(p->openFlag){if( p->RTime ++ < p->ATime) {if( *p->funA )p->funA() ;}else{if( *p->funB )p->funB() ;}if( p->RTime  >  p->ATime+p->BTime){p->RTime = 0;if( ++p->realCnt >= p->setcnt){p->openFlag = 0;}}}   else//无意义{p->openFlag = 0;}
}twinklefunctionType twfunc=
{twinkle_set,twinkle_timer_isr,
};

因为结构体比较复杂 再上面在接口一层比如BEEP

#ifndef _twbeep_H_
#define _twbeep_H_#include "basetwinkle.h"void beepon(void) ;
void beepoff(void);extern twapp_type    beep;//前台方便调用
extern twinkleType   twbeep;//后台定时器轮训#endif#include "main.h"
#include "twbeep.h"twinkleType twbeep={0};void beepon(void) {HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3, GPIO_PIN_SET);}
void beepoff(void){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3, GPIO_PIN_RESET);}void TWBEEP_write(uint8_t id,uint8_t num)
{twfunc.set(&twbeep,1,num,200,200,beepon,beepoff);
}twapp_type    beep=
{.write = TWBEEP_write,
};

现在就好了 去调用吧 底层的可以不要了 .H文件在BEEP里面再次包含了

在main

#include "twbeep.h"

static int cnt=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM6)
    {
        twfunc.isr(&twbeep);

}
}

这样就后台好了 前台自己试试

beep.write(2);

注意:ONENET 麒麟座 晶振不是8M是12M

基于麒麟座开始TIM6操作相关推荐

  1. AngularJS基于MVC的复杂操作案例

    AngularJS基于MVC的复杂操作案例 <!DOCTYPE html> <html><head><meta charset="UTF-8&quo ...

  2. 基于 Redis 实现 CAS 操作

    基于 Redis 实现 CAS 操作 Intro 在 .NET 里并发情况下我们可以使用 Interlocked.CompareExchange 来实现 CAS (Compare And Swap) ...

  3. ubuntu系统虚拟机linux系统,基于虚拟机的Linux操作系统安装(Ubuntu

    <基于虚拟机的Linux操作系统安装(Ubuntu>由会员分享,可在线阅读,更多相关<基于虚拟机的Linux操作系统安装(Ubuntu(13页珍藏版)>请在人人文库网上搜索. ...

  4. php购票排位_PHP基于双向链表与排序操作实现的会员排名功能示例

    本文实例讲述了PHP基于双向链表与排序操作实现的会员排名功能.分享给大家供大家参考,具体如下: 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双 ...

  5. AOP(基于注解对AspectJ操作)

    一.AOP底层使用动态代理 (1)有两种情况动态代理 第一种有接口情况,使用JDK动态代理 第二种没有接口情况,使用CGLIB动态代理 1.使用JDK动态代理,使用Proxy类里面的方法创建代理对象 ...

  6. bigru参数计算_[数据挖掘]华中科技大学 李黎 周达明:基于CNN-BiGRU模型的操作票自动化校验方法...

    原标题:[数据挖掘]华中科技大学 李黎 周达明:基于CNN-BiGRU模型的操作票自动化校验方法 智能变电站操作票校验是保障站内操作准确无误的重要环节,当前基于经验的人工校验方法主观性强,校验效率较低 ...

  7. php pdo 事物类,一个基于PDO的数据库操作类(新) 一个PDO事务实例

    /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录.多条记录,返回最 ...

  8. mysql修改工资字段_基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎)...

    基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎) 前言 本篇是基于Linux下针对MySQL表结构的修改,MySQL索引的操作以及MySQL数据引擎的配置和说明. ...

  9. 计算机视觉检测 白皓月,基于视线跟踪的操作界面的人机交互方法研究

    摘要: 人机交互主要是研究人与计算机之间的信息交换,是与人机工程学,认知心理学,虚拟现实技术,多媒体技术等密切相关的综合学科.本文研究的基于视线跟踪的操作界面的人机交互方法采用桌面式双目立体视觉实时跟 ...

最新文章

  1. Java反射 - 私有字段和方法
  2. 您必须在sources.list中指定代码源_python如何从源代码构建lxml
  3. Mysql之一:mysqldump和LVM逻辑卷快照
  4. android sharesdk分享功能,Android ShareSDK快速实现分享功能
  5. webpack --- 在项目中使用React
  6. 关于ArcGIS Rest API
  7. python defaultdict 类属性_Python collections.defaultdict模块用法详解
  8. android之appwidget(一)简单appwidget
  9. 强悍的命令 —— 命令参数的理解
  10. Linux命令 ls -l s输出内容含义详解
  11. 详解文本分类之DeepCNN的理论与实践
  12. 搞了一个迭代发布下SpringBoot Jar瘦身方案,老大给我打了个A+
  13. 打造高效的运维日志收集与分析平台
  14. 怎么理解知行之桥EDI系统的端口?
  15. matlab中的pascal函数
  16. java eclipse快捷键
  17. GB2312汉字拼音对照表
  18. FOI2019算法冬令营D1
  19. prisma2.0文档学习/翻译
  20. win10系统点击菜单没有反应

热门文章

  1. 创建一个闪亮的应用程序以使用rtweet和R搜索Twitter
  2. 微信新动作!加好友解除5000上限,扫码进群开放至200人
  3. NameError: name ‘weights‘ is not defined
  4. Activiti表结构
  5. Python GIS神器shapely 2.0新版本来了
  6. 三色球问题python_Python:验证密码程序与水仙花数、三色球问题
  7. 句柄Hwnd 与 窗口Wnd的联系
  8. 程序员必备英语单词清单
  9. CCF 202206-4 光线追踪 python
  10. FileZilla下载及基本用法