F7的配置思路和F103类似,高级定时器配置细节不一样。F7的高级定时器配置如图
定时器8的Output Compare Channel 4的模式选择retriggerable OPM模式时才有16个trigger信号正确输出,选择toggle on match模式没有输出,其他模式输出的脉冲个数不是16个。
经验证:当AD芯片是ADS8598时,选择retriggerable OPM1,读取到的AD数据会在正确的通道上,如果选择retriggerable OPM2,AD采集的某个通道的信号会出现在前一个信号通道上。
使用STM32F723的测频法与STM32103有所不同。使用两个定时器,一个TIM3用于产生1S的定时,一个用于计数外来的信号值。TIM3和TIM4不采用主从模式。TIM3配置如图:
TIM4的配置如图:时钟源选择外部触发作为时钟,这样可以对外部信号进行计数。
main.c程序关键代码如下:
HAL_TIM_Base_Start(&htim4);//启动定时器4
HAL_TIM_Base_Start_IT(&htim3);
HAL_TIM_Base_Start_IT(&htim4);
it.c程序关键代码如下:
extern uint16_t GRCounter;
uint16_t Last_GRCounter=0;
uint16_t Tim4_out=0;
uint16_t GR_Number=0;
uint16_t GR_Fre=0;
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim4;
void TIM3_IRQHandler(void)
{
/* USER CODE BEGIN TIM3_IRQn 0 */
__HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE); //清除TIMx的中断待处理
GRCounter=__HAL_TIM_GET_COUNTER(&htim4);//读取定时4对外部脉冲的计数结果
__HAL_TIM_SET_COUNTER(&htim4,0);
/* USER CODE END TIM3_IRQn 0 */
HAL_TIM_IRQHandler(&htim3);
/* USER CODE BEGIN TIM3_IRQn 1 */
/* USER CODE END TIM3_IRQn 1 */
}