EC20 4G模块可以通过串口和USB去驱动,但是串口速度比较慢,所以通过USB驱动才能提高通信速率。

硬件连接:
STM32F407:

EC20模块:

部分参考代码:


/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usb_host.h"
#include "usbh_def.h"
#include "usbh_cdc.h"
#include "string.h"UART_HandleTypeDef huart1;/* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
void MX_USB_HOST_Process(void);unsigned char recData[100];
unsigned int recLen;  void delay_ums(unsigned int i)
{unsigned int cnt;while(i--){cnt=33500;while(cnt--);}
}extern USBH_HandleTypeDef hUsbHostFS;
int main(void)
{unsigned int a;HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();MX_USB_HOST_Init();MX_GPIO_Init();HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);  delay_ums(1000);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);  while (1){/* USER CODE END WHILE */MX_USB_HOST_Process();delay_ums(1);a++;if(a>1000){a=0;USBH_CDC_Transmit(&hUsbHostFS, "AT\r\n", strlen("AT\r\n"));}/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage*/__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 4;RCC_OscInitStruct.PLL.PLLN = 168;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 7;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** 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_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){Error_Handler();}
}/*** @brief USART1 Initialization Function* @param None* @retval None*/
static void MX_USART1_UART_Init(void)
{/* USER CODE BEGIN USART1_Init 0 *//* USER CODE END USART1_Init 0 *//* USER CODE BEGIN USART1_Init 1 *//* USER CODE END USART1_Init 1 */huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART1_Init 2 *//* USER CODE END USART1_Init 2 */}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOH_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/*Configure GPIO pin Output Level *//*Configure GPIO pin : PA15 */GPIO_InitStruct.Pin = GPIO_PIN_15;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);/*Configure GPIO pin : PA15 */GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0|GPIO_PIN_2, GPIO_PIN_RESET);
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state *//* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
void USBH_CDC_ReceiveCallback(USBH_HandleTypeDef *phost)
{recLen = USBH_CDC_GetLastReceivedDataSize(phost); HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)recData,recLen);while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC)!=SET);     //等待发送结束    memset(recData,0x00,sizeof(recData));
}

主要是通过USB不停的发`AT\r\n`指令,然后串口打印输出USB接收到的数据,从而判断通信是否合适。

注意点:

完整MDK工程链接,点击下载

STM32F407通过自带USB驱动EC20 4G模块-完整工程相关推荐

  1. 小白求,用RE文件管理器移植移远EC20 4G模块驱动。 有重谢。请加w jiao1998524

    小白求,用RE文件管理器移植移远EC20   4G模块驱动.  有重谢.请加w  jiao1998524

  2. 驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)

    目录 一.EC20 4G模块简介 二.根据移远官方文档修改EC20 4G模组驱动   1.因为EC20 4G模组min-pice接口其实就是usb接口,因此需要修改Linux内核源码drivers/u ...

  3. i.MX6ULL终结者Linux 4G通信实验EC20 4G模块配置

    文章目录 1 添加USB设备信息 2 Linux内核配置 1 添加USB设备信息 要使用EC20 4G模块首先需要在Linux内核中添加EC20的USB信息,这样内核启动后,才能正确识别EC20 4G ...

  4. 迅为干货 | Linux系统移远EC20 4G模块移植方法

    硬件平台:迅为i.MX6Q开发板 1. 4G网络连接 对于嵌入式Linux而言,4G网络连接是一个比较容易实现的功能,大多数的4G模块接口都是MiniPCIE接口,但是深入了解一下就会发现,4G模块的 ...

  5. 移远EC20 4G模块LTE开发板三网通模块 MQTT阿里云物联网

    摘自:移远EC20 4G模块LTE开发板三网通模块 MQTT阿里云物联网STM32代码-电脑看 地址:https://www.bilibili.com/video/BV1EJ411P7CR?from= ...

  6. linux ec20 usb驱动移植,linux下EC20 4G模块驱动移植

    之前有移植过ME909s MU609,主要工作就是把4G模块当做USB设备,挂载在linux上,驱动移植主要是能够让板子识别到模块,并产生SUB多个虚拟的节点,用于操作模块,拨号上网 关于内核的配置, ...

  7. Linux移植EC20 4G模块驱动简易教程

    关于4G模块常见的品牌与型号: 品牌 型号 市场价格 芯片组 状态 HUAWEI ME909s-821 210-260 海思芯片,只有五模 在售 HUAWEI ME909s-521 400左右 高通芯 ...

  8. linux内核带usb驱动,Linux3.4内核USB驱动的移植

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作者:李老师,华清远见嵌入式学院讲师. [实验目的] USB接口是现在计算机系统中最通用的一种接口,通过移植USB驱动,了解Linux3.4内核与Linu ...

  9. c920摄像头驱动 linux,4G模块驱动 - PanGuBoard - 湃兔核i2SOM

    PanGu开发板搭载的Linux系统己经支持USB接口的4G通信模块,支持列表如下: 型号USB VID/PID厂商通讯方式安装方式通讯速度 EC20CFD-512-STD EC20CEHC-128- ...

最新文章

  1. 机器学习(10)随机森林(预测泰坦尼克号旅客存活率)
  2. 编译pqxx源码configure时遇到codecs.py LookupError的解决方法
  3. 条件、循环、函数定义 练习(2017.9.12)
  4. Microsoft CryptoAPI加密技术(一)
  5. c++ dll继续使用然后强制删除dll文件_Windows 10系统安全风险,近300个系统执行文件容易遭受劫持攻击...
  6. nginx 正则 结尾 配置_nginx location 配置阐述优先级别使用说明-不当可能存在安全隐患...
  7. iview Table列表中增加字体图标
  8. Enum、Stream
  9. kotlin 第一个程序_Kotlin程序减去两个矩阵
  10. C语言:求两个整数的最大公约数
  11. 计算机视觉方面的三大国际会议是ICCV, CVPR和ECCV,我统称之为ICE。
  12. cs用服务器运行,如何搭建自己的CS服务器(插件配置篇)
  13. JavaScript注释的运用
  14. 5个实用的Excel小技巧,谁用谁说好 !
  15. 运维脚本 内存管理统计(5)
  16. 五分钟为你的小程序增加公告功能(最新公告、列表、详情)
  17. Linux内核Hook系统调用execve
  18. RK3326[Android 8.1],获取BT、WIFI地址
  19. 1488:新的开始(Primt模板题)
  20. 东北林业大学锐格系统大一(指针与函数)

热门文章

  1. NLP与AI会议期刊详细整理「CCF, SCI」
  2. 201412-3 集合竞价
  3. ICS-43432MIC MEMS DIGITAL I2S OMNI -26DB
  4. 限流式保护器在建筑地下车库防火中的应用与研究
  5. Python 高斯朴素贝叶斯的优缺点
  6. 【昇腾AI系列】 在200DK运行MindX SDK的Yolov3+Resnet50样例
  7. 最新创意教师教学PPT模板
  8. 计算机网络技术参考文献怎么写,计算机网络技术论文参考文献范文 计算机网络技术期刊参考文献哪里找...
  9. html设定元素动画执行,CSS动画 _Animation 教程_W3cplus
  10. Asymptote 笔记0831