راه اندازی واحد تایمر ARM

خلاصه
در این آموزش با واحد تایمر میکروکنترلر آشنا می شویم و در ساده ترین حالت کاری تایمر، یک تاخیر مشخص ایجاد میکنیم وبرنامه چشمک زن را با استفاده از این تاخیر دوباره، پیاده سازی می کنیم.
مشاهده ویدیو
ایجاد پروژه در نرم افزار کیوب
در نرم افزار Keil می توان از قسمت Application/User به برنامه اصلی دسترسی داشت
تشریح کد برنامه
هدرفایل های مورد نیاز پروژه
[pastacode lang=”c” manual=”%2F*%20Includes%20——————————————————————*%2F%0A%23include%20%22main.h%22%0A%23include%20%22stm32f1xx_hal.h%22″ message=”” highlight=”” provider=”manual”/]
پیش تعریف توابع ایجاد شده توسط نرم افزار کیوب
[pastacode lang=”c” manual=”%2F*%20Private%20function%20prototypes%20———————————————–*%2F%0Avoid%20SystemClock_Config(void)%3B%0Astatic%20void%20MX_GPIO_Init(void)%3B%0Astatic%20void%20MX_TIM2_Init(void)%3B” message=”” highlight=”” provider=”manual”/]
متغیرهای مورد استفاده در برنامه
[pastacode lang=”c” manual=”%2F*%20Private%20variables%20———————————————————*%2F%0ATIM_HandleTypeDef%20htim2%3B%0A%0A%2F*%20USER%20CODE%20BEGIN%20PV%20*%2F%0A%2F*%20Private%20variables%20———————————————————*%2F%0Auint16_t%20tim2_Counter%3B%0A%2F*%20USER%20CODE%20END%20PV%20*%2F” message=”” highlight=”” provider=”manual”/]
جزئیات تابع MX_GPIO_Init
[pastacode lang=”c” manual=”%0A%2F**%20Configure%20pins%20as%20%0A%20%20%20%20%20%20%20%20*%20Analog%20%0A%20%20%20%20%20%20%20%20*%20Input%20%0A%20%20%20%20%20%20%20%20*%20Output%0A%20%20%20%20%20%20%20%20*%20EVENT_OUT%0A%20%20%20%20%20%20%20%20*%20EXTI%0A*%2F%0Astatic%20void%20MX_GPIO_Init(void)%0A%7B%0A%0A%20%20GPIO_InitTypeDef%20GPIO_InitStruct%3B%0A%0A%20%20%2F*%20GPIO%20Ports%20Clock%20Enable%20*%2F%0A%20%20__HAL_RCC_GPIOC_CLK_ENABLE()%3B%0A%20%20__HAL_RCC_GPIOA_CLK_ENABLE()%3B%0A%0A%20%20%2F*Configure%20GPIO%20pin%20Output%20Level%20*%2F%0A%20%20HAL_GPIO_WritePin(GPIOC%2C%20GPIO_PIN_2%7CGPIO_PIN_3%7CGPIO_PIN_4%7CGPIO_PIN_5%2C%20GPIO_PIN_RESET)%3B%0A%0A%20%20%2F*Configure%20GPIO%20pins%20%3A%20PC2%20PC3%20PC4%20PC5%20*%2F%0A%20%20GPIO_InitStruct.Pin%20%3D%20GPIO_PIN_2%7CGPIO_PIN_3%7CGPIO_PIN_4%7CGPIO_PIN_5%3B%0A%20%20GPIO_InitStruct.Mode%20%3D%20GPIO_MODE_OUTPUT_PP%3B%0A%20%20GPIO_InitStruct.Speed%20%3D%20GPIO_SPEED_FREQ_LOW%3B%0A%20%20HAL_GPIO_Init(GPIOC%2C%20%26GPIO_InitStruct)%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]
جزئیات تابع MX_TIM2_Init
[pastacode lang=”c” manual=”%2F*%20TIM2%20init%20function%20*%2F%0Astatic%20void%20MX_TIM2_Init(void)%0A%7B%0A%0A%20%20TIM_ClockConfigTypeDef%20sClockSourceConfig%3B%0A%20%20TIM_MasterConfigTypeDef%20sMasterConfig%3B%0A%0A%20%20htim2.Instance%20%3D%20TIM2%3B%0A%20%20htim2.Init.Prescaler%20%3D%20224%3B%0A%20%20htim2.Init.CounterMode%20%3D%20TIM_COUNTERMODE_UP%3B%0A%20%20htim2.Init.Period%20%3D%2063999%3B%0A%20%20htim2.Init.ClockDivision%20%3D%20TIM_CLOCKDIVISION_DIV1%3B%0A%20%20htim2.Init.AutoReloadPreload%20%3D%20TIM_AUTORELOAD_PRELOAD_DISABLE%3B%0A%20%20if%20(HAL_TIM_Base_Init(%26htim2)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20sClockSourceConfig.ClockSource%20%3D%20TIM_CLOCKSOURCE_INTERNAL%3B%0A%20%20if%20(HAL_TIM_ConfigClockSource(%26htim2%2C%20%26sClockSourceConfig)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20sMasterConfig.MasterOutputTrigger%20%3D%20TIM_TRGO_RESET%3B%0A%20%20sMasterConfig.MasterSlaveMode%20%3D%20TIM_MASTERSLAVEMODE_DISABLE%3B%0A%20%20if%20(HAL_TIMEx_MasterConfigSynchronization(%26htim2%2C%20%26sMasterConfig)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/]
تابع main
[pastacode lang=”c” manual=”int%20main(void)%0A%7B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%201%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%201%20*%2F%0A%0A%20%20%2F*%20MCU%20Configuration———————————————————-*%2F%0A%0A%20%20%2F*%20Reset%20of%20all%20peripherals%2C%20Initializes%20the%20Flash%20interface%20and%20the%20Systick.%20*%2F%0A%20%20HAL_Init()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%20Init%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20Init%20*%2F%0A%0A%20%20%2F*%20Configure%20the%20system%20clock%20*%2F%0A%20%20SystemClock_Config()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%20SysInit%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20SysInit%20*%2F%0A%0A%20%20%2F*%20Initialize%20all%20configured%20peripherals%20*%2F%0A%20%20MX_GPIO_Init()%3B%0A%20%20MX_TIM2_Init()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%202%20*%2F%0A%09HAL_TIM_Base_Start(%26htim2)%3B%0A%20%20%2F*%20USER%20CODE%20END%202%20*%2F%0A” message=”” highlight=”” provider=”manual”/]
روتین اجرای برنامه
[pastacode lang=”c” manual=”%20%20%2F*%20Infinite%20loop%20*%2F%0A%20%20%2F*%20USER%20CODE%20BEGIN%20WHILE%20*%2F%0A%20%20while%20(1)%0A%20%20%7B%0A%20%20%2F*%20USER%20CODE%20END%20WHILE%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%203%20*%2F%0A%09tim2_Counter%3Dhtim2.Instance-%3ECNT%3B%0A%09if%20(tim2_Counter%3E63999%2F2)%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_2%2CGPIO_PIN_SET)%3B%0A%09%09else%20HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_2%2CGPIO_PIN_RESET)%3B%0A%20%20%7D%0A%20%20%2F*%20USER%20CODE%20END%203%20*%2F” message=”” highlight=”” provider=”manual”/]
پروژه تایمر
کانال تلگرام نامینیک
نظر بدهید