利用STM32CubeMX软件生成USB_HOST_CDC驱动ME909s-821ap(4G通信模块)

本文档详细介绍了如何使用STM32CubeMX配置STM32F429IGT6微控制器,通过串口1接收AT命令,并通过USB接口将命令转发给4G通信模块。配置包括串口1接收中断、USB_OTG_HS配置、USB_HOST设置,以及针对特定4G模块(如ME909s)的USB_Host_CDC类请求和接收回调函数的调整。最终实现了从串口软件发送AT命令并接收4G模块响应的功能。

一、测试平台:
MCU:STM32F429IGT6
工具:STM32CubeMX软件
编译软件:MDK

二、配置步骤
(1).打开STM32CubeMX软件,创建新的工程文件,先生成一个不带操作系统的串口1例程,生成串口的例程这里不再详细介绍。
(2).由于测试通信模块时需要给通信模块发送AT命令,所以在这里我们将串口1接上电脑,通过电脑串口软件下发AT命令,串口1接收中断收到数据之后将AT命令通过USB接口转发给4G通信模块。由于AT命令都是以0x0D 0x0A结束,所以当串口收到0x0A时,则所以数据接收完成,之后将数据转发给4G通信模块。
(3).编写串口1接收中断函数,实现串口1收到以0x0A结尾的数据之后,将数据回传到电脑端串口软件中。由于STM32CubeMX生成的工程中没有开启串口1接收中断,在这里添加上。
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
在这里插入图片描述
添加串口1接收和发送的函数
///重定向c库函数printf到USART1

int fputc(int ch, FILE *f)
{
   
   
		unsigned char bCh=0;
		bCh=ch;
		HAL_UART_Transmit(&huart1,&bCh,1,10);
		return (ch);
}

unsigned char TxdData[UART_BUF_LEN];
unsigned char bRxdFinishFlag=0;
unsigned char RxdData[UART_BUF_LEN];
unsigned char bRxLen=0;
unsigned char UsbRxdData[USB_BUF_LEN];

void Test_USART_TXRX(void)
{
   
   
	if(1==bRxdFinishFlag)
	{
   
   
		bRxdFinishFlag=0;
		HAL_UART_Transmit(&huart1,RxdData,bRxLen,100);
	}
}

在这里插入图片描述

void USART1_IRQHandler(void)
{
   
   
  /* USER CODE BEGIN USART1_IRQn 0 */
	uint8_t  bData=0;
	static uint8_t bCnt=0;
	
	if(__HAL_UART_GET_FLAG( &huart1, UART_FLAG_RXNE ) != RESET)
	{
   
   		
    bData=( uint8_t)READ_REG(huart1.Instance->DR);
		RxdData[bCnt++]=bData;
		if(RxdData[bCnt-1]==0x0A)
		{
   
   
			bRxLen=bCnt;
			bCnt=0;
			bRxdFinishFlag=1;
		}   
	}
  /* USER CODE END USART1_IRQn 0 */
//  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

在这里插入图片描述
(4).测试串口1的接收和发送,电脑串口1软件下发0x0A结尾的AT命令,串口1可以接收到下发的命令。
在这里插入图片描述
(5).配置USB_OTG,由于电路板上的USB引出来的管脚是PB14,PB15,所以在这里需要配置USB_OTG_HS,由于电路板上没有外接Phy,所以这里配置为内部的FS Phy,Internal FS Phy选项下Host Only,同时配置中断。
在这里插入图片描述
(6).配置USB_HOST,由于4G通信模块是CDC设备,所以在这里配置为Class For HS IP项下选择Communication Host Class(Virtual Port Com)。因为ME909s模块连接后,配置描述符下一共有5个 Interface , 并且 Interface 中至多有3个Endpoint(下面简称Ep)。所以 USBH_MAX_NUM_ENDPOINTS 需配置 >3 , USBH_MAX_NUM_INTERFACES 需配置 >5.。
在这里插入图片描述
(7).生成代码之后,修改classcode,由于ME909s厂商自定义的classcode是0xFF,所以将USB_CDC_CLASS宏定义修改为0xFF。
#define USB_CDC_CLASS 0x02
#define USB_CDC_CLASS 0xFF //厂商自定义classcode

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值