
串口重定向接收不同
STM32F407 ADC Dual regular simultaneous only 模式下最高采样率仅 96 kHz,960 kHz 无法工作,求助!
STM32 F407骄阳电机版用DMA双缓存接收串口数据时,上电第一次接收区是memory1而不是memory0?
STM32F407骄阳版用DMA双缓存区接收串口数据,上电第一次接收到的数据在memory1而不是memory0
stm32f407无法配置定时器2为全部dma
FreeRTOS问题求解
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
ST的IMU和地磁计用motionfx库融合后航向角异常的问题
CUEBIDE生成的APP程序,在写入FLASH之后无法正常跳转。
有关Cubeide IAP 问题
楼主配置成输出,容易引起电平冲突。
不妨改为输入试试,最终目的是将输入电平在有效范围内且不能损坏IO引脚
设置为输入,可以用做中断,但不能做定时器计数功能,设置成复用推挽输出,主要是用它的复用功能设置成定时器引脚,输入功能我也试过了,进不了定时器计数功能
你先保证给到测量脚的信号电平是合适的、可识别的;
如果要使用TIMER的话,不知你的相关配置是怎样的。
按照你目前的做法,感觉你是希望从外部引入TIMER的计数时钟,此时你要将TIMER配置
在外部时钟模式1,时钟从TIMER的通道1或通道2的管脚进来。
因你连最基本的芯片型号信息也没说,不知你说的PA0是否某个TIMER的通道1或通道2的一个复用脚。
芯片是STM32F407,引脚是PA0
定时器计数的初始化:
void gtim_timx_cnt_chy_init(uint16_t psc) { GPIO_InitTypeDef gpio_init_struct; TIM_SlaveConfigTypeDef tim_slave_config = {0}; GTIM_TIMX_CNT_CHY_CLK_ENABLE(); / 使能TIMx时钟 / GTIM_TIMX_CNT_CHY_GPIO_CLK_ENABLE(); / 开启GPIOA时钟 /
g_timx_cnt_chy_handle.Instance = GTIM_TIMX_CNT; / 定时器x / g_timx_cnt_chy_handle.Init.Prescaler = psc; / 预分频系数 / g_timx_cnt_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP; / 递增计数模式 / g_timx_cnt_chy_handle.Init.Period = 65535; / 自动重装载值 / HAL_TIM_IC_Init(&g_timx_cnt_chy_handle);
gpio_init_struct.Pin = GTIM_TIMX_CNT_CHY_GPIO_PIN; / 输入捕获的GPIO口 / gpio_init_struct.Mode = GPIO_MODE_AF_PP; / 复用推挽输出 / gpio_init_struct.Pull = GPIO_PULLDOWN; / 下拉 / gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; / 高速 / gpio_init_struct.Alternate = GTIM_TIMX_CNT_CHY_GPIO_AF; / 复用为捕获TIMx的通道 / HAL_GPIO_Init(GTIM_TIMX_CNT_CHY_GPIO_PORT, &gpio_init_struct);
/ 从模式:外部触发模式1 / tim_slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; / 从模式:外部触发模式1 / tim_slave_config.InputTrigger = TIM_TS_TI1FP1; / 输入触发:选择 TI1FP1(TIMX_CH1) 作为输入源 / tim_slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING; / 触发极性:上升沿 / tim_slave_config.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1; / 触发预分频:无 / tim_slave_config.TriggerFilter = 0x0; / 滤波:本例中不需要任何滤波 / HAL_TIM_SlaveConfigSynchronization(&g_timx_cnt_chy_handle, &tim_slave_config);
HAL_NVIC_SetPriority(GTIM_TIMX_CNT_IRQn, 1, 3); / 设置中断优先级,抢占优先级1,子优先级3 / HAL_NVIC_EnableIRQ(GTIM_TIMX_CNT_IRQn); / 开启ITMx中断 /
__HAL_TIM_ENABLE_IT(&g_timx_cnt_chy_handle, TIM_IT_UPDATE); / 使能更新中断 / HAL_TIM_IC_Start(&g_timx_cnt_chy_handle, GTIM_TIMX_CNT_CHY); / 开始捕获TIMx的通道y / }
芯片是STM32F407,引脚是PA0
定时器计数的初始化:
void gtim_timx_cnt_chy_init(uint16_t psc) { GPIO_InitTypeDef gpio_init_struct; TIM_SlaveConfigTypeDef tim_slave_config = {0}; GTIM_TIMX_CNT_CHY_CLK_ENABLE(); / 使能TIMx时钟 / GTIM_TIMX_CNT_CHY_GPIO_CLK_ENABLE(); / 开启GPIOA时钟 /
g_timx_cnt_chy_handle.Instance = GTIM_TIMX_CNT; / 定时器x / g_timx_cnt_chy_handle.Init.Prescaler = psc; / 预分频系数 / g_timx_cnt_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP; / 递增计数模式 / g_timx_cnt_chy_handle.Init.Period = 65535; / 自动重装载值 / HAL_TIM_IC_Init(&g_timx_cnt_chy_handle);
gpio_init_struct.Pin = GTIM_TIMX_CNT_CHY_GPIO_PIN; / 输入捕获的GPIO口 / gpio_init_struct.Mode = GPIO_MODE_AF_PP; / 复用推挽输出 / gpio_init_struct.Pull = GPIO_PULLDOWN; / 下拉 / gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; / 高速 / gpio_init_struct.Alternate = GTIM_TIMX_CNT_CHY_GPIO_AF; / 复用为捕获TIMx的通道 / HAL_GPIO_Init(GTIM_TIMX_CNT_CHY_GPIO_PORT, &gpio_init_struct);
/ 从模式:外部触发模式1 / tim_slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; / 从模式:外部触发模式1 / tim_slave_config.InputTrigger = TIM_TS_TI1FP1; / 输入触发:选择 TI1FP1(TIMX_CH1) 作为输入源 / tim_slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING; / 触发极性:上升沿 / tim_slave_config.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1; / 触发预分频:无 / tim_slave_config.TriggerFilter = 0x0; / 滤波:本例中不需要任何滤波 / HAL_TIM_SlaveConfigSynchronization(&g_timx_cnt_chy_handle, &tim_slave_config);
HAL_NVIC_SetPriority(GTIM_TIMX_CNT_IRQn, 1, 3); / 设置中断优先级,抢占优先级1,子优先级3 / HAL_NVIC_EnableIRQ(GTIM_TIMX_CNT_IRQn); / 开启ITMx中断 /
__HAL_TIM_ENABLE_IT(&g_timx_cnt_chy_handle, TIM_IT_UPDATE); / 使能更新中断 / HAL_TIM_IC_Start(&g_timx_cnt_chy_handle, GTIM_TIMX_CNT_CHY); / 开始捕获TIMx的通道y / }
你的确配置了定时器的时钟模式1,从CH1过来的信号。
我看你配置捕获功能,被捕获的信号还是你说的CH1-PA0吗?如果PA0作为TIMER的外部时钟输入脚,
它是不能再作为捕获脚的。我看你启动了针对通道y的捕获,如果不是PA0所对应的脚倒没关系。
还有,不知你启动TIMER的计数功能没有,库函数的话就是__HAL_TIM_ENABLE(&htim),实质就是
将TIM->CR1的CEN置位。它置位后,每当外部时钟脚出现信号时就会自动进行计数。