اولین برنامه با ARM چشمک زن

اولین برنامه با ARM چشمک زن


خلاصه بخش اول

در این آموزش با واحد GPIO میکروکنترلر آشنا می شویم و اولین پروژه، که شامل LED های چشمک زن می باشد را پیاده سازی می کنیم. کد مربوط به پیکربندی میکروکنترلر را با استفاده از نرم افزار CubeMX تولید خواهیم کرد و برای کدنویسی از نرم افزار Keil استفاده می کنیم.


خلاصه بخش دوم

در این آموزش از کلیدهای فشاری برد آموزشی به عنوان ورودی استفاده می کنیم و در غالب یک پروژه متناظر با هر کلید فشاری یکی از LED های برد آموزشی را روشن و خاموش می کنیم


مشاهده ویدیو بخش اول


مشاهده ویدیو بخش دوم


ایجاد پروژه در نرم افزار کیوب


انتخاب پین های متناسب با LED ها و کلید های فشاری برد آموزشی



در نرم افزار Keil می توان از قسمت Application/User به برنامه اصلی دسترسی داشت



تشریح کد برنامه


هدرفایل های مورد نیاز پروژه


/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_hal.h"

پیش تعریف توابع ایجاد شده توسط نرم افزار کیوب


/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

جزئیات تابع MX_GPIO_Init


/** Configure pins as 
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
*/
static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_RESET);

  /*Configure GPIO pins : PC2 PC3 PC4 PC5 */
  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pins : PC6 PC7 PC8 PC9 */
  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}

تابع main


در ابتدای برنامه تمام بخش های میکروکنترلر ریست می شود، واحد کلاک میکرو کنترلر تنظیم می شود و واحد GPIO طبق آنچه که در نرم افزار کیوب انتخاب کردیم تنظیم می شود.


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();

روتین اجرای برنامه


  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
		if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6)==0){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);
		}
		else if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6)==1){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_RESET);
		}
////////////////////////				
		if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==0){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);
		}
		else if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7)==1){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_RESET);
		}
////////////////////////		
		
		if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8)==0){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_SET);
		}
		else if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8)==1){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_RESET);
		}
////////////////////////		
		if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)==0){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_SET);
		}
		else if (HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)==1){
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_RESET);
		}		
//		HAL_Delay(500);
  }



پروژه چشمک زن

کانال تلگرام نامینیک

گروه تلگرام نامینیک ARM STM32


 

Tags: , , , , , ,