相关具体内容参考 stm32f4xx_hal_time.h
几种模式函数的类型都差不多,包括基本类型(Base),输出比较(OC),输入捕获(IC),pwm(PWM),单脉冲(One_Pulse)和编码器(Encoder)。
/****** xxx使用上述几种模式的英文替换即可*******/
HAL_TIM_xxx_Init
HAL_TIM_xxx_DeInit
HAL_TIM_xxx_MspInit
HAL_TIM_xxx_MspDeInit
/***轮询方式启动/停止/
HAL_TIM_xxx_Start
HAL_TIM_xxx_Stop
/***中断方式启动/停止/
HAL_TIM_xxx_Start_IT
HAL_TIM_xxx_Stop_IT
/****DMA方式启动/停止/
HAL_TIM_xxx_Start_DMA
HAL_TIM_xxx_Stop_DMA
定时器基本函数:
/* Time Base functions ********************************************************/
HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim);
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef htim);
/ Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef htim);
/ Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef htim);
/ Non-Blocking mode: DMA */
HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);
输出比较模式:
/* Timer Output Compare functions **********************************************/
HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim);
void HAL_TIM_OC_MspInit(TIM_HandleTypeDef htim);
void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef htim);
/ Blocking mode: Polling 轮询模式/
HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: Interrupt 中断模式 */
HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: DMA DMA模式/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
PWM模式:
/* Timer PWM functions *********************************************************/
HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim);
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);
void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef htim);
/ Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: DMA */
HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
输入捕获模式:
/* Timer Input Capture functions ***********************************************/
HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef htim);
/ Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: DMA */
HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
单脉冲模式:
/* Timer One Pulse functions ***************************************************/
HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode);
HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim);
void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim);
void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef htim);
/ Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
/* Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
编码器模式
/* Timer Encoder functions *****************************************************/
HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef htim, TIM_Encoder_InitTypeDef sConfig);
HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim);
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim);
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef htim);
/ Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef htim, uint32_t Channel);
/ Non-Blocking mode: DMA */
HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
中断处理函数:
/* Interrupt Handler functions **********************************************/
void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
控制函数:
/* Control functions *********************************************************/
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef htim, TIM_OC_InitTypeDef sConfig, uint32_t Channel);//配置输出比较通道
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef htim, TIM_OC_InitTypeDef sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef htim, TIM_IC_InitTypeDef sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef htim, TIM_OnePulse_InitTypeDef sConfig, uint32_t OutputChannel, uint32_t InputChannel);
HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef * sClearInputConfig, uint32_t Channel);
//时钟源配置函数
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef * sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef * sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef * sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
回调函数:
/* Callback in non blocking modes (Interrupt and DMA) *************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);//周期结束时调用。
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim); //CCR匹配即翻转时,发生调用。
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
状态函数:
/* Peripheral State functions 就是获取相应TIM_HandleTypeDef句柄结构的state成员**************************************************/
HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);
HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim);
HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim);
HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim);
HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim);
HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
还有几个宏定义是为了获取和设置计时器相关的寄存器的值(CCR ,CNT,ARR )
Capture Compare Register(CCR):
#define __HAL_TIM_SET_COMPARE(HANDLE, CHANNEL, COMPARE)
(*(__IO uint32_t *)(&((HANDLE)->Instance->CCR1) + ((CHANNEL) >> 2U)) = (COMPARE))
#define __HAL_TIM_GET_COMPARE(HANDLE, CHANNEL)
(*(__IO uint32_t *)(&((HANDLE)->Instance->CCR1) + ((CHANNEL) >> 2U)))
Counter Register(CNT):
#define __HAL_TIM_SET_COUNTER(HANDLE, COUNTER) ((HANDLE)->Instance->CNT = (COUNTER))
#define __HAL_TIM_GET_COUNTER(HANDLE) ((HANDLE)->Instance->CNT)
Autoreload Register(ARR):
#define __HAL_TIM_SET_AUTORELOAD(HANDLE, AUTORELOAD)
do{
(HANDLE)->Instance->ARR = (AUTORELOAD);
(HANDLE)->Init.Period = (AUTORELOAD);
} while(0U)
#define __HAL_TIM_GET_AUTORELOAD(HANDLE) ((HANDLE)->Instance->ARR)
TIM Clock Division value:
#define __HAL_TIM_GET_CLOCKDIVISION(HANDLE) ((HANDLE)->Instance->CR1 & TIM_CR1_CKD)
#define __HAL_TIM_SET_CLOCKDIVISION(HANDLE, CKD)
do{
(HANDLE)->Instance->CR1 &= (uint16_t)(~TIM_CR1_CKD);
(HANDLE)->Instance->CR1 |= (CKD);
(HANDLE)->Init.ClockDivision = (CKD);
} while(0U)
TIM Input Capture prescaler:
上一篇:STM32 TIM定时器 库函数学习笔记
下一篇:STM32F1库函数初始化系列:定时器中断
推荐阅读
史海拾趣
2001年,惠普公司与康柏公司宣布合并,DEC作为康柏的一部分也随之并入惠普。这次合并进一步扩大了DEC的业务范围和市场影响力。在合并后,DEC的计算机产品和技术被整合到惠普的产品线中,同时DEC的品牌也逐渐淡出市场。然而,DEC在计算机行业中的贡献和影响力仍然被广泛认可,其技术遗产和创新精神在惠普及其他科技公司中得到了传承和发展。
随着公司业务的不断扩展,DATEL Inc.开始实施全球化战略。公司积极开拓国际市场,与全球各地的合作伙伴建立了紧密的合作关系。通过引进国际先进技术和管理经验,DATEL Inc.的产品质量和服务水平得到了进一步提升。同时,公司还加强了对海外市场的营销和推广力度,成功将DATEL Inc.的品牌推向了全球。
在人才方面,启臣微一直把人才作为公司发展的核心驱动力。公司建立了一套完善的人才培养机制,为员工提供广阔的职业发展空间和良好的工作环境。同时,公司还积极引进国内外优秀人才,为公司的创新发展注入了新的活力。这些优秀人才的加入,不仅提升了公司的技术水平和管理能力,也为公司的发展注入了新的动力。
作为一家有社会责任感的企业,长江连接器积极履行社会责任和推动可持续发展。公司注重环保和节能减排,采用环保材料和绿色生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,长江连接器还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅体现了公司的社会责任感,也为其赢得了更多客户和合作伙伴的信任和支持。
为了进一步拓展市场和提升竞争力,长江连接器开始实施全球化战略。公司积极在海外设立生产基地和研发中心,加强与国际知名企业的合作和交流。通过引进国际先进的生产技术和管理经验,长江连接器不断提升自身的生产能力和管理水平。同时,公司还积极参与国际竞争和合作,与全球各地的客户建立了长期稳定的合作关系。
Arima Lasers Corp深知人才是企业发展的核心驱动力。因此,公司高度重视人才培养和团队建设。通过制定完善的培训计划和激励机制,公司吸引了一批批优秀的研发人才和管理人才。这些人才为公司的发展注入了源源不断的动力,推动了公司在技术、市场和管理等各个方面的全面提升。
大虾网上的一个想法,觉得不错,设想了一种8051的bootloader实现方式,欢迎大家讨论 前提:单片机的所有FLASH可通过程序修改 FLASH内存划分: 0x0000-0x0fff:Bootloader 0x1000-0xffff:用户程序 Bootloader处理方式: 在startup.a51里,加入 ...… 查看全部问答∨ |
|
我现在用的是vxworks平台 cpu是powerpc的MPC8248 原来我的bootrom程序中RAM_LOW_ADRS、RAM_HIGH_ADRS分别设置的为0x00010000和0x01e00000,现在我的vxworks映像过大,修改了RAM_HIGH_ADRS的值(config.h和makefile中),结果机器会不断重启,请问 ...… 查看全部问答∨ |
大家还记得一个月前,我在这问了一个关于CAN-BUS学习的问题,整整一个月过去了,现在已经掌握BASSIC CAN 和PELI CAN的原理,并把两种模式的程序调试成功(两个节点),总结这一个月,收获很多,从ARM到51,对单片机的理解又有了新的认识...非常的开心,与大家 ...… 查看全部问答∨ |
本帖最后由 ddllxxrr 于 2016-1-7 17:11 编辑 这个东西是,仁者见仁智者见智的东西, 我觉得在淘宝买东西很有必要: 1,当地有些件买不到,比如LPC1114,STM32你去电子市场长买吧,怕八辈子也买不到. 2,方便,对与我这样大门不出二门紧闭的人, ...… 查看全部问答∨ |
|
我刚毕业没多久,希望未来是从事平台、底层软件、BSP等方面工作。 1.嵌入式软件如何分层? 芯片厂商做哪部分?平台开发做哪部分?应用开发又做哪部分? 怎么样区分才能做到通用性? 2.如何做好API? 3.开发前期,考虑换以 ...… 查看全部问答∨ |
|
公司要我做stm8单片机的相关的技术研发,提出要求从用户代码不通过复位直接跳转到UBC(用户启动代码)模式下;在UBC模式下要跳转到用户代码是很简单的,几条语句就解决了,例如:typedef @far void (*TFUNCTION)(void); const TFUNCTION M ...… 查看全部问答∨ |