一、定时器和外部触发的同步
TIMx定时器能够在多种模式下和一个外部的触发同步:复位模式、门控模式和触发模式。
- 从模式:复位模式
复位模式时序图如下所示:
配置通道1以检测TI1的上升沿,配置定时器为复位模式,计数器为向上计数模式,选择T1位输入源。每一个计数器时钟周期计数器寄存器自增。当TI1产生一个上升沿时,计数器寄存器清0重新开始计数。
- 从模式:门控模式
门控模式时序图如下所示:
配置通道1以检测TI1的低电平,配置定时器为门控模式,计数器为向上计数模式,选择T1为输入源。每一个计数器时钟周期计数器寄存器自增。只要TI1为低,计数器开始依据内部时钟计数,在TI1为高电平时停止计数。
- 从模式:触发模式
配置通道2检测TI2的上升沿。配置定时器为触发模式,选择TI2为输入源。当TI2出现一个上升沿时,计数器开始在内部时钟的驱动下计数。
二、利用复位模式串口接收不定长数据
利用复位模式串口接收不定长数据的思路为:将定时器通道引脚与串口RX引脚硬件上连接,串口接收使用DMA方式,定时器在串口未收到数据时不工作,当串口收到数据时,配置定时器,关闭串口中断,当串口上还有数据未接收完成时,计数器不断清0重新开始计数,一旦串口无接收数据时,计数器不再复位,知道产生计数器中断,然后将收到的数据读出。
- 串口配置:
这里都是些常规配置。
/***************************************************************************
* @fn Usart1_Configuration
*
* @brief
*
* @data
*
* @param BaudRate -
* NewState - ENABLE/DISABLE
*
* @return void
***************************************************************************
*/
void Usart1_Configuration(uint32_t BaudRate,uint16_t parity, uint16_t wordlength, uint16_t stopbits,FunctionalState NewState)
{