注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
申小林的个人空间 https://home.eeworld.com.cn/space-uid-416893.html [收藏] [复制] [分享] [RSS]
日志

【B-G431B-ESC1-电机开发板试用】-02-串口,定时器-LED灯的测试

已有 475 次阅读2024-7-26 16:58 |个人分类:开发板试用报告

板子回来了就开始了程序的编写,最基础的就是点灯,然后就是串口和定时器的测试,今天正好工作做完了,就来做一下最基础的接口测试,首先我们需要知道硬件的连接情况,

 

由上面的原理图可以清楚的知道关于引脚的定义的一些事情,我们用到的是LED和串口,所以目前只需要知道这两个接口的引脚连接情况就可以了。
通过原理图,我们知道:
LED:PC6
UART2-TXD:PC3
UART2-RXD:PC4
接下来就是代码的编写。定时器我们就暂定使用TIM1,后期用起来也方便一些。
我们这里就不多讲解原理,直接上代码。

#include "DRV_LED.h"


void LED_Init(void)
{
  static GPIO_InitTypeDef  GPIO_InitStruct;
  __HAL_RCC_GPIOC_CLK_ENABLE();
  /* -2- Configure IO in output push-pull mode to drive external LEDs */
  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  GPIO_InitStruct.Pin =GPIO_PIN_6 ;
  HAL_GPIO_Init(GPIOC , &GPIO_InitStruct);

}


void LED_Test(void)
{
   HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
   HAL_Delay(500);
}

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV4;
  RCC_OscInitStruct.PLL.PLLN = 85;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {

  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  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_4) != HAL_OK)
  {
  }
}

上面的是LED的和时钟的函数。

#include "DRV_TIM.h"



TIM_HandleTypeDef htim1;

void TIM_Init(void)
{
	
  __HAL_RCC_TIM1_CLK_ENABLE();
	htim1.Instance = TIM1;
	htim1.Init.Prescaler = 0;
	htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
	htim1.Init.Period = 170;
	htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
	htim1.Init.RepetitionCounter = 999;
	htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  {
		
  }
	HAL_TIM_Base_Start_IT(&htim1);
  HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn);
}

int count=0;
void TIM1_UP_TIM16_IRQHandler(void)
{

	if(__HAL_TIM_GET_FLAG(&htim1,TIM_FLAG_UPDATE)!=RESET)
	{
		count++;
	if(count==1000)
	{
	  count=0;
		 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6);
	}
	  __HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);
	}
}

上面的是定时器的。

 

在串口的使用的时候需要知道管脚复用的情况。具体的需要查看数据手册。
串口的设置还吃需要做printf的重定向,

#include "DRV_UART.h"

UART_HandleTypeDef huart;

void UART_IO_Init(void)
{
	 GPIO_InitTypeDef  GPIO_InitStruct;
	__HAL_RCC_GPIOB_CLK_ENABLE();
	
	//--TXD
	GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;
	GPIO_InitStruct.Pull  = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
	GPIO_InitStruct.Pin = GPIO_PIN_4;
	GPIO_InitStruct.Alternate=GPIO_AF7_USART2;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
		//--RXD
	GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;
	GPIO_InitStruct.Pull  = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
	GPIO_InitStruct.Pin = GPIO_PIN_3;
	GPIO_InitStruct.Alternate=GPIO_AF7_USART2;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	

}






void UART_Init(void)
{ 
	UART_IO_Init();
	__HAL_RCC_USART2_CLK_ENABLE()    ;
  huart.Instance = USART2;
  huart.Init.BaudRate = 115200;
  huart.Init.WordLength = UART_WORDLENGTH_8B;
  huart.Init.StopBits = UART_STOPBITS_1;
  huart.Init.Parity = UART_PARITY_NONE;
  huart.Init.Mode = UART_MODE_TX_RX;
  huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart.Init.OverSampling = UART_OVERSAMPLING_16;
  huart.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  huart.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart) != HAL_OK)
  {

  }

}


 int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

好了整体效果可以参考下面的图

 

今天的接口测试就先到这里,后期将持续更新。

 

 
 

 

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章