S32K144-7.lptmr系统定时器

Microseconds  1us微秒

Ticks 0.25us

  1. lptmr0定时器初始化配置

  1. 设置定时器中断回调函数

 

 

 

void lptmr1_init(){

//初始化 lptmr

LPTMR_DRV_Init(INST_LPTMR1, &lpTmr1_config0,1);

//系统绑定lptmr中断函数

INT_SYS_InstallHandler(LPTMR0_IRQn,&LPTMR0_IRQn_Handler,NULL);

//使能系统

INT_SYS_EnableIRQ(LPTMR0_IRQn);

//设置中断优先级

INT_SYS_SetPriority(LPTMR0_IRQn,2);

//lptmr开始计数

LPTMR_DRV_StartCounter(INST_LPTMR1);

}

//中断函数

void LPTMR0_IRQn_Handler(void){

LPTMR_DRV_ClearCompareFlag(INST_LPTMR1);

}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是S32K144-EVB开发板CAN的示例代码,包括初始化和发送数据的函数: ```c #include "S32K144.h" void CAN_Init(void) { // 开启CAN时钟 PCC->PCCn[PCC_FlexCAN0_INDEX] |= PCC_PCCn_CGC_MASK; // 复位CAN模块 FLEXCAN0->MCR |= FLEXCAN_MCR_SOFT_RST_MASK; while (FLEXCAN0->MCR & FLEXCAN_MCR_SOFT_RST_MASK); // 设置CAN为32位宽度 FLEXCAN0->MCR |= FLEXCAN_MCR_MAXMB(0x1F); // 最大邮箱号 FLEXCAN0->MCR |= FLEXCAN_MCR_FRZ_MASK; // 进入冻结模式 FLEXCAN0->MCR |= FLEXCAN_MCR_HALT_MASK; // 进入停止模式 FLEXCAN0->CTRL1 |= FLEXCAN_CTRL1_CLKSRC_MASK; // 选择系统时钟作为CAN时钟 FLEXCAN0->CTRL1 |= FLEXCAN_CTRL1_PRESDIV(0); // 分频系数为1 FLEXCAN0->MCR &= ~FLEXCAN_MCR_FRZ_MASK; // 退出冻结模式 FLEXCAN0->MCR &= ~FLEXCAN_MCR_HALT_MASK; // 退出停止模式 // 配置邮箱 FLEXCAN0->MB[0].CS |= FLEXCAN_MB_CS_IDE_MASK; // 使用扩展帧 FLEXCAN0->MB[0].CS |= FLEXCAN_MB_CS_SRR_MASK; // 启用自发自收 FLEXCAN0->MB[0].CS |= FLEXCAN_MB_CS_RTR_MASK; // 启用数据请求 FLEXCAN0->MB[0].ID |= FLEXCAN_MB_ID_EXT_MASK; // 使用扩展标识符 FLEXCAN0->MB[0].ID |= FLEXCAN_MB_ID_IDSTD(0x123); // 标准标识符 FLEXCAN0->MB[0].ID |= FLEXCAN_MB_ID_IDEXT(0x456); // 扩展标识符 FLEXCAN0->MB[0].WORD0 |= 0x11223344; // 数据字0 FLEXCAN0->MB[0].WORD1 |= 0x55667788; // 数据字1 // 开启邮箱接收中断 FLEXCAN0->IMASK |= (1 << 0); NVIC_EnableIRQ(CAN0_ORed_Message_buffer_IRQn); } void CAN_Send(uint8_t *data, uint8_t len) { uint32_t i; // 等待邮箱空闲 while (FLEXCAN0->IFLAG1 & (1 << 0)); // 发送数据 FLEXCAN0->MB[0].CS &= ~(FLEXCAN_MB_CS_DLC_MASK); FLEXCAN0->MB[0].CS |= FLEXCAN_MB_CS_DLC(len); for (i = 0; i < len; i++) { FLEXCAN0->MB[0].DATA_BYTE(i) = data[i]; } FLEXCAN0->MB[0].CS &= ~(FLEXCAN_MB_CS_CODE_MASK); FLEXCAN0->MB[0].CS |= FLEXCAN_MB_CS_CODE(0xC); // 发送数据帧 } ``` 在上述代码中,`CAN_Init`函数用于初始化CAN模块,包括开启时钟、复位、设置时钟、配置邮箱等操作。`CAN_Send`函数用于发送数据,首先等待邮箱空闲,然后设置数据、数据长度和发送帧类型,最后发送数据。需要注意的是,此处的邮箱号为0,如果需要使用其他邮箱,需要相应地修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YELL.DOLL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值