بستن منو
×

نوشتن روی GPIO در STM32

ابتدا طبق جلسه ساخت پروژه در stm32cubemx در نرم افزار stm32cubemx یک پروژه جدید میسازیم و پایه ای که قرار است روی آن نوشته شود را خروجی تعریف میکنیم نیازی نیست تنظیمات خاصی را در آن انجام دهیم. پس میرویم gpio در stm32 یاد بگیریم

ساخت پروژه در STM32cubemx

برای این کار ما روی پایه مورد نظر راست کلیک میکنیم و گزینه GPIO_Output را انتخاب میکنیم .

خروجی کردن پایه در stm32

 

حالا یک خروجی برای نرم افزار keil میگیریم ( طبق جلسه ساخت پروژه در stm32cubemx )

 

برنامه نویسی در محیط keil

حالا آن را در نرم افزار keil باز میکنیم ، از بین پوشه ها پوشه application/user/core را انتخاب میکنیم و فایل main.c را باز میکنیم :فایل ها در keil

این فایل برنامه اصلی شما هست و فایلی هست که توی اون باید توی اون برنامه اصلی خودتون رو بنویسید که به صورت کلی برنامه زیر در اون نوشته شده ( متن هایی که بین /* و */ نوشته شده اند فقط نمای ظاهری دارند و هیچ تاثیری در برنامه ندارند و فقط جهت راهنمایی نوشته شده اند به آن کامنت گفته میشود و آنها را میتوانید پاک کنید )

توضیحات تابع main :

در تصویر زیر تابع main بدون کامنت را میبینید :

تابع main در keil

توضیحات while

کد هایی که تا قبل از while نوشته شود فقط یکبار اجرا میشود مانند تعیین وضعیت gpio در stm32 ورودی و خروجی بودن پایه در میکروکنترلر که فقط یکبار کافی است آن تعریف شود

کد هایی که درون while نوشته میشود مکرر اجرا میشود و تا بینهایت ادامه پیدا میکند ، ما کد هایی که قرار است همیشه اجرا شود را در این بخش مینویسیم

 

ساخت چشمک زن با STM32

برای ساخت چشمک زن با STM32 باید ۴ مرحله را طی کنیم :

  1. مقدار پایه را ۱ کنیم ( مقدار ۱ به معنای روشن شدن پایه هست )
  2. ۱ ثانیه صبر کنیم
  3. مقدار پایه را ۰ کنیم ( مقدار ۰ به معنای خاموش شدن پایه هست )
  4. ۱ ثانیه صبر کنیم

 

تغییر وضعیت پایه

HAL_GPIO_WritePin( PORT , PIN , PinState );

در دستور بالا میتوانید وضعیت پایه را تغییر دهید ، تابع HAL_GPIO_WritePin تعداد ۳ عدد ورودی دریافت میکند :

PORT : پورتی که پایه مربوطه به آن وصل است برای مثال GPIOC یعنی پورت C

PIN : شماره پایه ای که مدنظر ماست برای مثال GPIO_PIN_13 یعنی پایه ۱۳ از پورت مد نظر

pinState : وضعیت پایه را مشخص کنید که میخواهید gpio در stm32 خاموش باشد یا روشن ۰ به معنای خاموش است و ۱ به معنای روشن

مثال :

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,0);

تاخیر در برنامه

HAL_Delay( time );

با دستور بالا میتوانید در برنامه تاخیر ایجاد کنید که یک ورودی دریافت میکند :

time : مدت زمانی که باید تاخیر کند ( برحسب میلی ثانیه – هر ثانیه ۱۰۰۰ میلی ثانیه است )

مثال :

HAL_Delay(1000);

کد نهایی:

#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,0);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,1);
HAL_Delay(500);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *