STM32配置CH375B成HID Host模式读取自定义HID设备的数据 ——STM32端口初始化

原创 2017年04月07日 09:49:03

        最近产品需要一个USB主机测试治具,所以需要做一个USB HOST去读取HID设备的数据,由于以前也没做过USB方面的项目,对这一块也不是很熟悉,因此遇到了很多困难,所幸的是经过两天半的努力,最终完成了CH375B的调试。得意不多废话,先上一张我调试的MCU管脚分配图

 

头文件

#ifndef __BSP_INIT_H__
#define __BSP_INIT_H__

#include "stm32f0xx_hal.h"
#include "config.h"

typedef struct
{
	struct
	{
		uint16_t USB_BaseTime;
		uint8_t  USB_Flag;
	}USB_Heart;
}Sys_Heart_Def;

typedef struct
{
	Sys_Heart_Def   Sys_Heart_Info;
	uint8_t         USB_Connect_Status;
}Sys_Param_Def;

extern Sys_Param_Def      SysParam_Info;
extern UART_HandleTypeDef HAL_CH375_USART;

void Error_Handler(void);
void Bsp_Peripherals_Init(void);

#endif


详细的代码如下:

#include "bsp_init.h"

Sys_Param_Def      SysParam_Info;
/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef HAL_CH375_USART;

void Bsp_SystemClock_Init(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;

  /* Initializes the CPU, AHB and APB busses clocks */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /* Initializes the CPU, AHB and APB busses clocks */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                |RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  {
    Error_Handler();
  }

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  {
    Error_Handler();
  }

  /* Configure the Systick interrupt time */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  /* Configure the Systick */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

void Bsp_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;

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

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(CH375_D0_GPIO_Port, CH375_D0_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_D1_GPIO_Port, CH375_D1_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_D2_GPIO_Port, CH375_D2_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_D3_GPIO_Port, CH375_D3_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_D4_GPIO_Port, CH375_D4_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_D5_GPIO_Port, CH375_D5_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_D6_GPIO_Port, CH375_D6_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_D7_GPIO_Port, CH375_D7_Pin, GPIO_PIN_SET);
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(CH375_WR_GPIO_Port, CH375_WR_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_RD_GPIO_Port, CH375_RD_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_CS_GPIO_Port, CH375_CS_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(CH375_A0_GPIO_Port, CH375_A0_Pin, GPIO_PIN_SET);	
	
  /*Configure GPIO pin : CH375_INT_Pin */
  GPIO_InitStruct.Pin = CH375_INT_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(CH375_INT_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : CH375_D0_Pin CH375_D1_Pin CH375_D2_Pin CH375_D3_Pin 
                           CH375_D4_Pin CH375_D5_Pin CH375_D6_Pin CH375_D7_Pin */
  GPIO_InitStruct.Pin = CH375_D0_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(CH375_D0_GPIO_Port, &GPIO_InitStruct);	
	
  GPIO_InitStruct.Pin = CH375_D1_Pin;
  HAL_GPIO_Init(CH375_D1_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_D2_Pin;
  HAL_GPIO_Init(CH375_D2_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_D3_Pin;
  HAL_GPIO_Init(CH375_D3_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_D4_Pin;
  HAL_GPIO_Init(CH375_D4_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_D5_Pin;
  HAL_GPIO_Init(CH375_D5_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_D6_Pin;
  HAL_GPIO_Init(CH375_D6_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_D7_Pin;
  HAL_GPIO_Init(CH375_D7_GPIO_Port, &GPIO_InitStruct);
	
  /*Configure GPIO pins : CH375_WR_Pin CH375_RD_Pin CH375_CS_Pin CH375_A0_Pin */
  GPIO_InitStruct.Pin = CH375_WR_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(CH375_WR_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_RD_Pin;
  HAL_GPIO_Init(CH375_RD_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_CS_Pin;
  HAL_GPIO_Init(CH375_CS_GPIO_Port, &GPIO_InitStruct);
	
  GPIO_InitStruct.Pin = CH375_A0_Pin;
  HAL_GPIO_Init(CH375_A0_GPIO_Port, &GPIO_InitStruct);
	
  HAL_NVIC_SetPriority(EXTI4_15_IRQn,0,0);
  HAL_NVIC_DisableIRQ(EXTI4_15_IRQn);
}

void Bsp_CH375_USART_Init(void)
{

  HAL_CH375_USART.Instance = USART1;
  HAL_CH375_USART.Init.BaudRate = 115200;
  HAL_CH375_USART.Init.WordLength = UART_WORDLENGTH_8B;
  HAL_CH375_USART.Init.StopBits = UART_STOPBITS_1;
  HAL_CH375_USART.Init.Parity = UART_PARITY_NONE;
  HAL_CH375_USART.Init.Mode = UART_MODE_TX_RX;
  HAL_CH375_USART.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  HAL_CH375_USART.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_CH375_USART.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  HAL_CH375_USART.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&HAL_CH375_USART) != HAL_OK)
  {
    Error_Handler();
  }
  __HAL_UART_ENABLE(&HAL_CH375_USART);
}

void Bsp_Peripherals_Init(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Configure the system clock */
  Bsp_SystemClock_Init();
  Bsp_GPIO_Init();
  Bsp_CH375_USART_Init();
}

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler */
  /* User can add his own implementation to report the HAL error return state */
  while(1) 
  {
  }
  /* USER CODE END Error_Handler */ 
}

/***/


STM32 USB HID 自定义设备 bulk 传输

STM32 USB HID 自定义设备 bulk 传输ST(意法半导体公司)为STM32系列处理器编写了外设USB的库,并提供了很好的参考例程,本文就是参考ST提供的例程,在STM32F4 disco...
  • chengwenyang
  • chengwenyang
  • 2016年04月02日 00:17
  • 7240

STM32配置CH375B成HID Host模式读取自定义HID设备的数据 ——STM32配置CH375B接口函数

接着上一篇上传,这个是STM32配置CH375B时用到的接口函数 代码如下: #include "bsp_ch375.h" #include "bsp_init.h" #include "bsp_de...
  • zhushengbing11090
  • zhushengbing11090
  • 2017年04月07日 13:37
  • 1040

STM32 自定义HID USB设备的实现

最近需要使用STM32开发一个设备通过HID协议与主机通信,于是开始学习USB,发现USB这个体系实在太庞大了,直接看USB的例程根本看不懂,完全找不到突破口,最后在网上找到一本不错的书《圈圈教你玩U...
  • agave7
  • agave7
  • 2015年01月23日 12:09
  • 5155

STM32自定义HID设备块传输+libusb上位机程序

  • 2016年04月02日 19:13
  • 2.05MB
  • 下载

STM32 自定义USB HID 设备与上位机双向通信例程

  • 2015年02月02日 22:16
  • 4.77MB
  • 下载

通过自定义HID设备实现PC与STM32之间灵活的双向通信

  • 2012年10月09日 20:40
  • 107KB
  • 下载

STM32实现自定义HID通信

  • 2014年05月10日 15:43
  • 997KB
  • 下载

STM32高级教程之USB HID双向数据传输

程序功能: 1,将STM32的USB枚举为HID设备。 2,STM32使用3个端点,端点0用于枚举用,端点1和2用于数据的发送和接收。 3,端点长度为64,也就是单次最多可以传输64个字节数...
  • jhn199388
  • jhn199388
  • 2017年05月24日 17:19
  • 706

STM32——USB详细使用说明 附件HID的双向通信

转自:http://blog.sina.com.cn/s/blog_98ee3a930100wn6m.html 说明:使用的是STM32F103ZET6 硬件原理图 在开始枚举设备的一些初始...
  • wxh0000mm
  • wxh0000mm
  • 2017年07月11日 16:56
  • 348

STM32——USB详细使用说明 附件HID的双向通信(一)

说明:使用的是STM32F103ZET6 硬件原理图 在开始枚举设备的一些初始化 void bsp_USBInit(void) {     GPIO_InitTypeDef  GPIO_...
  • u012507643
  • u012507643
  • 2016年10月26日 11:19
  • 2616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM32配置CH375B成HID Host模式读取自定义HID设备的数据 ——STM32端口初始化
举报原因:
原因补充:

(最多只允许输入30个字)