问题描述
我对 STM32 和 Keil 中的 C++ 编码相当陌生,我正在寻求对我当前项目的一些帮助。我正在使用 Barth STG-850 PLC 之类的板,它是一个 STM32F091CC 芯片,具有大量 I/O、CAN 外设等。我用它来读取和传输罐头数据以设置某些变量,并发送速度读数从定时器输入通过 CAN 操作巡航控制。到目前为止,我已经成功设置了主代码、配置了 I/O、配置了 CAN 外设,并且我已经开始处理定时器输入捕获代码。在 Keil 中使用调试,我看到定时器正在初始化,正在计数,并且在检测到定时器输入引脚上的上升沿时,该值存储在捕获比较寄存器中。从这一点来看,void 函数应该被触发,但它没有被执行。在我的主要内容中,我有以下内容:
> int main(void) { /* MCU
> Configuration----------------------------------------------------------*/
>
> /* Reset of all peripherals,Initializes the Flash interface and the
> Systick. */ HAL_Init();
>
> /* Configure the system clock */ SystemClock_Config();
>
> /* Initialize all configured peripherals */ MX_GPIO_Init();
> MX_ADC_Init(); MX_CAN_Init(); MX_IWDG_Init(); MX_RTC_Init();
> MX_TIM16_Init(); MX_TIM17_Init(); MX_USART1_UART_Init();
> MX_USART3_IRDA_Init(); MX_I2C2_Init(); MX_TIM1_Init();
> MX_TIM2_Init();
> HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
>
> MainInit(); //
> ======================================================================= // Set up baudrate
hcan.Instance->BTR &= 0xFFFFFC00;
> hcan.Instance->BTR |= CAN_500K;
被调用的函数是
>
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
if(Is_First_Captured==0)
{
TimVal1 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1); // capture the first value
Is_First_Captured =1; // set the first value captured as true
}
else if (Is_First_Captured) // if the first is captured
{
TimVal2 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1); // capture second value
if (TimVal2 > TimVal1)
{
TimDif = TimVal2-TimVal1; // calculate the difference
}
else if (TimVal2 < TimVal1)
{
TimDif = ((0xffff-TimVal1)+TimVal2) +1;
}
else
{
Error_Handler();
}
Freq = HAL_RCC_GetPCLK1Freq()/TimDif; // calculate frequency
Speed = (Freq/2.2); // Calculate speed
Is_First_Captured = 0; // reset the first captured
}
}
}
由于某种原因,代码没有被调用,我不知道为什么!全局中断已启用,我尝试使用不同的计时器等,但无济于事。所有的中断处理都在stm320fxx_hal_tim.c中配置,所以不需要包含在main.c文件中吗?
如果有人可以提供帮助,将不胜感激!! 谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)