راه اندازی واحد سریال ARM

واحد سریالARM


خلاصه

در این آموزش با واحد سریال USART میکروکنترلر آشنا می شویم و داده هایی را از میکروکنترلر به رایانه ارسال می کنیم، همچنین داده هایی از سمت رایانه به میکروکنترلر ارسال می کنیم و با پروسس این داده ها، LED های برد آموزشی را کنترل می کنیم. به عنوان مثال اگر عبارت 1 از رایانه دریافت شود 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);
static void MX_USART2_UART_Init(void);

متغیرهای مورد استفاده در برنامه


/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
char rx_Buffer [10];
/* USER CODE END PV */

جزئیات تابع 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();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOD_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);

}

جزئیات تابع MX_USART2_UART_Init



/* USART2 init function */
static void MX_USART2_UART_Init(void)
{

  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

تابع main


int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
	HAL_UART_Transmit(&huart2,(uint8_t *)"Success",7,10);
  /* USER CODE END 2 */

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

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
	HAL_UART_Receive(&huart2,(uint8_t *) rx_Buffer,10,10);
	switch (	rx_Buffer[0] ){
		case '1' : HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);
			break;
		case '2' : HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);
			break;
		case '3' : HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_4);
			break;
		case '4' : HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_5);
			break;
	}
  }
  /* USER CODE END 3 */

پروژه سریال

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

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


Tags: , , , , , ,