一、中断函数注册方法:

1、格式:

配置某个功能的中断
注册中断函数
开启中断

2、一个例子

pit_init_ms(PIT0,5);//定时中断初始化
set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler);      //设置PIT0的中断服务函数为 PIT0_IRQHandler
enable_irq (PIT0_IRQn);

二、ADC模块

1、ADC通道管脚对应表

typedef enum
{// ---------------------------------ADC0-------------------------
    ADC0_DP0,ADC0_DP1,PGA0_DP,        //不支持ADC,需要配置 ADC PGA register 设置放大增益
    ADC0_DP3,//软件触发不支持B通道ADC0_SE4b,      // PTC2     不支持软件ADCADC0_SE5b,      // PTD1     不支持软件ADCADC0_SE6b,      // PTD5     不支持软件ADCADC0_SE7b,      // PTD6     不支持软件ADC
ADC0_SE8,       // PTB0ADC0_SE9,       // PTB1ADC0_SE10,      // PTA7ADC0_SE11,      // PTA8ADC0_SE12,      // PTB2ADC0_SE13,      // PTB3ADC0_SE14,      // PTC0ADC0_SE15,      // PTC1ADC0_SE16,      // ADC0_SE16ADC0_SE17,      // PTE24ADC0_SE18,      // PTE25ADC0_DM0,       // ADC0_DM0ADC0_DM1,       // ADC0_DM1RES0,           // 保留RES1,           // 保留DAC0_OUT,       // DAC0输出 不支持ADCRES2,           // 保留RES3,           // 保留Temp0_Sensor,   // Temperature Sensor,内部温度测量,可用ADC函数Bandgap0,       // 温度补偿结构带隙基准源   不支持ADCRES4,           // 保留VREFH0,         // 参考高电压,可用ADC函数 ,结果恒为 2^n-1VREFL0,         // 参考低电压,可用ADC函数 ,结果恒为 0Module0_Dis,    // 不支持 ADC// ---------------------------------ADC1-------------------------
    ADC1_DP0,ADC1_DP1,PGA1_DP,        // 不支持 ADC
    ADC1_DP3,ADC1_SE4a,      // PTE0ADC1_SE5a,      // PTE1ADC1_SE6a,      // PTE2ADC1_SE7a,      // PTE3
ADC1_SE4b = ADC1_SE4a,  // PTC8     不支持软件ADC ,传递 ADC1_SE4b 到软件ADC函数里,会当作 ADC1_SE4a 处理。ADC1_SE5b = ADC1_SE5a,  // PTC9     不支持软件ADCADC1_SE6b = ADC1_SE6a,  // PTC10    不支持软件ADCADC1_SE7b = ADC1_SE7a,  // PTC11    不支持软件ADC
ADC1_SE8,       // PTB0ADC1_SE9,       // PTB1ADC1_SE10,      // PTB4ADC1_SE11,      // PTB5ADC1_SE12,      // PTB6ADC1_SE13,      // PTB7ADC1_SE14,      // PTB10ADC1_SE15,      // PTB11ADC1_SE16,      // ADC1_SE16ADC1_SE17,      // PTA17VREF_OUTPUT,    // VREF OutputADC1_DM0,       // ADC1_DM0ADC1_DM1,       // ADC1_DM1RES5,           //保留
    RES6,DAC1_OUT,RES7,           //保留
    RES8,Temp1_Sensor,Bandgap1,       // 温度补偿结构带隙基准源   不支持ADC
    RES9,VREFH1,         // 参考高电压,可用ADC函数 ,结果恒为 2^n-1VREFL1,         // 参考低电压,可用ADC函数 ,结果恒为 0Module1_Dis,    // 不支持 ADC

} ADCn_Ch_e;

2、精度选择

//精度位数
typedef enum ADC_nbit
{ADC_8bit   = 0x00,ADC_10bit  = 0x02,ADC_12bit  = 0x01,ADC_16bit  = 0x03
} ADC_nbit;

3、接口使用

//外部函数接口声明//初始化 ADC0_SE10 ,使用 PTA7 管脚
extern void     adc_init    (ADCn_Ch_e);                //ADC初始化// ADCn_Ch_e    ADC通道
//ADC_nbit          ADC精度
extern uint16   adc_once    (ADCn_Ch_e, ADC_nbit);      //采集一次一路模拟量的AD值extern uint16   ad_flt(ADCn_Ch_e adcn_ch, ADC_nbit bit);//与前几次采样平均
extern uint16   ad_ave(ADCn_Ch_e adcn_ch, ADC_nbit bit, uint8 N); //均值滤波
extern void     adc_stop    (ADCn_e);                   //停止ADC转换

三、DAC模块(智能车不使用)

typedef enum DACn       //DAC模块
{DAC0,DAC1
} DACn_e;extern void dac_init(DACn_e);               //DAC一次转换初始化
extern void dac_out(DACn_e, uint16 val);    //DAC一次转换操作

四、DMA模块使用(智能车不使用)

1、使用目的

传输数据使用,这样子的话可以和主程序同时进行。这样子的话,可以在数据量大的时候不占用程序执行的时间。

2、使用方法API

/*!*  @brief      DMA初始化,读取端口数据到内存*  @param      DMA_CHn         通道号(DMA_CH0 ~ DMA_CH15)*  @param      SADDR           源地址( (void * )&PTx_Bn_IN 或 (void * )&PTx_Wn_IN   )*  @param      DADDR           目的地址*  @param      PTxn            触发端口*  @param      DMA_BYTEn       每次DMA传输字节数*  @param      count           一个主循环传输字节数*  @param      cfg             DMA传输配置,从DMA_cfg里选择*  @since      v5.0*  @note       DMA PTXn触发源默认上升沿触发传输,若需修改,则初始化后调用 port_init 配置DMA 触发方式初始化后,需要调用 DMA_EN 来实现*  Sample usage:   uint8 buff[10];dma_portx2buff_init(DMA_CH0, PTB_B0_IN, buff, PTA7, DMA_BYTE1, 10, DADDR_RECOVER);//DMA初始化,源地址:PTB_B0_IN,目的地址:buff,PTA7触发(默认上升沿),每次传输1字节,共传输 10次 ,传输结束后恢复地址port_init(PTA7,ALT1 | DMA_FALLING);             //默认触发源是上升沿,此处改为 下降沿触发DMA_EN(DMA_CH0);                //需要使能 DMA 后才能传输数据*/
void dma_portx2buff_init(DMA_CHn CHn, void *SADDR, void *DADDR, PTXn_e ptxn, DMA_BYTEn byten, uint32 count, uint32 cfg);

五、延时模块使用(精准)

extern void dwt_delay_us(uint32 us);
extern void dwt_delay_ms(uint32 ms);

六、Flash使用

1、API使用

/*----------   *DFLASH  写浮点数*   ----------*/
void DFlash_Write_Float(uint16_t Block_Now,unsigned int Order,float Write_Float); /*----------   *DFLASH  读浮点数*   ----------*/
float DFlash_Read_Float(uint16_t Block_Now,unsigned int Order);/*----------   *DFLASH  写整数*   ----------*/
void DFlash_Write_Int(uint16_t Block_Now,unsigned int Order,signed int Write_Int);   /*----------   *DFLASH  读整数*   ----------*/
signed int DFlash_Read_Int(uint16_t Block_Now,unsigned int Order);

2、使用注意点:一定要关闭中断再打开中断

3、一个DEMO:

/*----------   *用户写参数 传递函数*   ----------*/
void write_transfer_function(void)
{//整形参数传递//user_int_data[0] = data_int_test;                                 //第一个变量为整形测试变量,往后自己添加需要存贮的变量//浮点型参数传递//user_float_data[0] = data_float_test;                           //第一个变量为浮点型测试变量,往后自己添加需要存贮的变量
  }/*----------   *用户读参数 传递函数*   ----------*/
void read_transfer_function(void)
{DisableInterrupts;//整形参数传递//data_int_test = user_int_data[0];                                 //第一个变量为整形测试变量,往后自己添加需要存贮的变量//浮点型参数传递//data_float_test = user__float_data[0];                           //第一个变量为浮点型测试变量,往后自己添
  EnableInterrupts; }/*----------   *flash 写入用户自定义参数函数*   ----------*/
void Write_data(uint8_t SECTOR_NUM)
{int int_start = 1,float_start = 101;DisableInterrupts;flash_erase_sector(SECTOR_NUM);write_transfer_function();for(int_start = 1;int_start < 100;int_start++)DFlash_Write_Int(SECTOR_NUM,int_start,user_int_data[int_start - 1]);              //从偏移地址1开始,写入整形数据for(float_start = 101;float_start < 200;float_start++)DFlash_Write_Float(SECTOR_NUM,float_start,user_float_data[float_start - 101]);   //从偏移地址101开始,写入浮点型数据
  EnableInterrupts;
}/*----------   *flash 读取用户自定义参数函数*   ----------*/
void Read_data(uint8_t SECTOR_NUM)
{int int_start = 1,float_start = 101;for(int_start = 1;int_start < 100;int_start++)user_int_data[int_start - 1] = DFlash_Read_Int(SECTOR_NUM,int_start);              //从偏移地址1开始,读出整形数据for(float_start = 101;float_start < 200;float_start++)user_float_data[float_start - 101] = DFlash_Read_Float(SECTOR_NUM,float_start); //从偏移地址101开始,读出浮点型数据
  read_transfer_function();
}

七、PWM模块使用

1、PWM端口对应:

2、API使用:

#define FTM0_PRECISON 3000u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/FTM_PRECISON
#define FTM1_PRECISON 3000u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/FTM_PRECISON
#define FTM2_PRECISON 6000u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/FTM_PRECISONextern void  FTM_PWM_init(FTMn_e, FTM_CHn_e, uint32 freq, uint32 duty);  //初始化FTM的PWM功能并设置频率、占空比。设置通道输出占空比。同一个FTM,各通道的PWM频率是一样的,共3个FTMextern void  FTM_PWM_Duty(FTMn_e, FTM_CHn_e,              uint32 duty);  //设置通道占空比,占空比为 (duty * 精度) % ,如果 FTM_PRECISON 定义为 1000 ,duty = 100 ,则占空比 100*0.1%=10%
extern void  FTM_PWM_freq(FTMn_e,            uint32 freq);               //设置FTM的频率(改频率后,需要重新配置占空比)

八、脉冲计数

1、方法一:FTM中的正交解码:

/*********************** 正交解码功能 **************************/
//本功能 尚未测试
extern void     FTM_QUAD_Init(FTMn_e ftmn);         //初始化FTM 的正交解码 功能
extern int16    FTM_QUAD_get(FTMn_e ftmn);          //获取FTM 正交解码 的脉冲数(负数表示反方向)
extern void     FTM_QUAD_clean(FTMn_e ftmn);        //清 FTM 正交解码 的脉冲数
void FTM2_QUAD_Int(void) ;
#endif  //_MK60_FTM_H_

2、方法二:LPTMR中的低功耗计数

/*       用于脉冲计数        */
extern void     lptmr_pulse_init  (LPT0_ALTn, uint16 count, LPT_CFG);   //计数器初始化设置
extern uint16   lptmr_pulse_get   (void);                               //获取计数值
extern void     lptmr_pulse_clean (void);                               //清空计数值

九、GPIO使用

/****************************外部使用****************************/extern void    gpio_init  (PTXn_e, GPIO_CFG, uint8 data);    //初始化gpio
extern void    gpio_ddr   (PTXn_e, GPIO_CFG);                //设置引脚数据方向
extern void    gpio_set   (PTXn_e,           uint8 data);    //设置引脚状态
extern void    gpio_turn  (PTXn_e);                          //反转引脚状态
extern uint8   gpio_get   (PTXn_e);                          //读取引脚状态//如下 4个 函数 的 PTxn 只能是 宏定义,不能是 变量
#define GPIO_SET(PTxn,data)       (PTXn_T(PTxn,OUT)= (data))    //设置输出电平
#define GPIO_TURN(PTxn)           (PTXn_T(PTxn,T)= 1)           //翻转输出电平
#define GPIO_GET(PTxn)            (PTXn_T(PTxn,IN))             //读取引脚输入状态
#define GPIO_DDR(PTxn,ddr)        (PTXn_T(PTxn,DDR) = ddr)      //输入输出状态

十、LPTMR模块API

/***  @brief LPTMR脉冲计数输入管脚选项*/
typedef enum
{//只有1、2管脚,并没有0、3管脚LPT0_ALT1 = 1,      // PTA19LPT0_ALT2 = 2       // PTC5
} LPT0_ALTn;/***  @brief LPTMR脉冲计数触发方式*/
typedef enum LPT_CFG
{LPT_Rising  = 0,    //上升沿触发LPT_Falling = 1     //下降沿触发
} LPT_CFG;#define LPTMR_Flag_Clear()  (LPTMR0_CSR |= LPTMR_CSR_TCF_MASK)         //清除LPT比较标志位/*          用于延时         */
extern void     lptmr_delay_ms(uint16 ms);      //延时(ms)
extern void     lptmr_delay_us(uint16 us);      //延时(us)/*       用于定时           */
extern void     lptmr_timing_ms(uint16 ms);     //定时(ms)
extern void     lptmr_timing_us(uint16 ms);     //定时(us)/*        用于计时           */
extern void     lptmr_time_start_ms(void);      //开始计时(ms)
extern uint32   lptmr_time_get_ms(void);        //获取计时时间 extern void     lptmr_time_start_us(void);      //开始计时(ns)
extern uint32   lptmr_time_get_us(void);        //获取计时时间 extern void     lptmr_time_close();             //关闭计时器/*       用于脉冲计数        */
extern void     lptmr_pulse_init  (LPT0_ALTn, uint16 count, LPT_CFG);   //计数器初始化设置
extern uint16   lptmr_pulse_get   (void);                               //获取计数值
extern void     lptmr_pulse_clean (void);                               //清空计数值/*      中断复位函数模版    */
extern void lptmr_test_handler(void);                                       //中断复位函数,仅供参考(需用户自行实现)

十一、串口对应模块

API使用:

/初始化
extern void uart_init      (UARTn_e, uint32 baud);             //初始化uartx模块
void uart_init_old (UARTn_e uratn, uint32 baud);
//接收相关代码
extern void uart_getchar   (UARTn_e, unsigned char *ch);                //等待接受1个字节
char uart_getchar_old (UARTn_e uratn);
extern char uart_querychar (UARTn_e, char *ch);                //查询接收1个字符
extern char uart_querystr  (UARTn_e, char *str, uint32 max_len); //查询接收字符串
extern char uart_querybuff (UARTn_e, char *str, uint32 max_len); //查询接收buffextern char uart_query    (UARTn_e);                          //查询是否接收到一个字节//发送相关代码
extern void uart_putchar   (UARTn_e, char ch);                 //发送1个字节
extern void uart_putbuff   (UARTn_e , uint8 *buff, uint32 len);//发送len个字节buff
extern void uart_putstr    (UARTn_e , const uint8 *str);       //发送字符串//中断相关代码
extern void uart_rx_irq_en (UARTn_e);                          //开串口接收中断
extern void uart_tx_irq_en (UARTn_e);                          //开串口发送中断
extern void uart_txc_irq_en (UARTn_e);                         //开串口发送完成中断extern void uart_rx_irq_dis(UARTn_e);                          //关串口接收中断
extern void uart_tx_irq_dis(UARTn_e);                          //关串口发送中断
extern void uart_txc_irq_dis(UARTn_e);                         //关串口发送完成中断extern void uart3_test_handler(void);                        //中断复位函数,仅供参考(需用户自行实现)

转载于:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/5047285.html

智能车学习(十五)——K60野火2013版例程相关推荐

  1. 智能车学习日记【五】——————坡道和弯接坡道

    文章目录 前言 一.坡道的判别 二.直道接坡道 1.上坡 2.位于坡道上 3.下坡 三.弯接坡道 总结 前言 这里记录一下坡道的写法和思路.博主的坡道处理是纯图像处理,没有使用陀螺仪等其他硬件设备进行 ...

  2. 智能车学习日记【一】——让小车跑正方形赛道(摄像头图像处理赛道)

    智能车学习日记[一]--让小车跑正方形赛道 目录 开篇 舵机 赛道图像处理 图像处理 代码![在这里插入图片描述](https://img-blog.csdnimg.cn/9ec0eb76bd8941 ...

  3. OpenCV与图像处理学习十五——LBP纹理特征(含代码)

    OpenCV与图像处理学习十五--LBP纹理特征(含代码) 一.LBP介绍 二.LBP原理 三.代码应用 一.LBP介绍 LBP(Local Binary Pattern, 局部二值模式) , 是一种 ...

  4. PyTorch框架学习十五——可视化工具TensorBoard

    PyTorch框架学习十五--可视化工具TensorBoard 一.TensorBoard简介 二.TensorBoard安装及测试 三.TensorBoard的使用 1.add_scalar() 2 ...

  5. 智能车学习日记【四】————环岛

    智能车学习日记[四]----环岛 文章目录 智能车学习日记[四]----环岛 前言 一.环岛分状态(以左环岛为例) 二.每个状态思路 状态1和状态2: 状态3: 状态4: 状态5: 状态6: 状态7: ...

  6. C++学习 十五、类继承(1)基类,派生类,访问权限,protected

    C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...

  7. OpenGL入门学习(十五)

    OpenGL入门学习[十五] 这次讲的所有内容都装在一个立方体中,呵呵. 呵呵,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了. 先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说 ...

  8. Linux学习十五 DNS基础服务

    Linux学习十五 DNS基础服务 DNS服务基础 BIND 伯利克Internet 域名服务 主要执行程序:/usr/sbin/named 系统服务:named 默认端口: TCP/UDP 53 主 ...

  9. 智能车学习日记【二】————十字和斜入十字

    智能车学习日记[二]----十字和斜入十字 文章目录 智能车学习日记[二]----十字和斜入十字 前言 一.普通十字补线 二.斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 ...

最新文章

  1. 上市公司总市值TOP10出炉,你所在县区看的到未来吗?
  2. kepware怎么读modbus/tcp数据_多机房多活架构,究竟怎么玩?
  3. GitHub 4.6 万星:Windows Terminal 预览版开放下载!
  4. Oracle 11g 新特性简介
  5. 预编译头超出上限错误 就是include比较多
  6. h5页面嵌入android app时遇到的问题
  7. django-如何debug
  8. [Essay] Blog 带来机会?
  9. Android添加程序背景颜色,Android小程序实现切换背景颜色
  10. Django 高级(其他知识点)
  11. 中国智慧建造投资前景预测与十四五战略规划建议报告2022年版
  12. Flutter补间动画
  13. 看日漫学日语:日漫里常看到的日语100句(建议收藏)
  14. windows Server 2012修复(CVE-2016-2183)(CVE-2013-2566)(CVE-2015-2808)
  15. 当APO生产订单报工遇到物料账期没开
  16. 计划任务备份MSSQL_se7en3_新浪博客
  17. 汽车发动机如何做保养,名悦集团教你几个小技巧
  18. 【java 操作mysql】java连接mysql数据库并查询数据
  19. SpringCloud-Alibaba-SMS
  20. 扇贝python课程打卡_扇贝打卡500天纪实——如何有效利用扇贝记单词、学习英语?...

热门文章

  1. 关于常用触发器及其应用的部分实验
  2. 精灵标记助手(Colabeler)超详细使用教程-最简单标记助手
  3. nodejs的 面试大全 容易 难的都有
  4. 解决snmp不能使用外部地址访问问题
  5. SU-03T语音模块使用简介
  6. 关于zebra中thread的解析
  7. 钉钉与钉钉对接集成查询表单列表详情(宜搭)连通发起审批实例(官方)(钉钉【项目事项】未审核完成=>钉钉【工作延误记录表】)
  8. 数学期望和概率DP题目泛做(为了对应AD的课件)
  9. 关于centos7主机之间免密登陆qqf
  10. python3 (学习第一天)