私は 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 ファイルに含める必要はありませんか?
誰かが助けることができれば、それは大歓迎です!! ありがとう。