在STM32串行通信的基础上加入无线通信模块sim900a

在上一篇文章中我们使用HAL库进行了基础的串行通信控制继电器的吸合详情可见STM32(HAL库)串行通信控制继电器-CSDN博客

现在我们在这个的基础上加入sim900a无线通信模块进行远程控制。

先使用AT指令进行我们的模块初始化

uint8_t AT_data1[]="AT+ECHO=0";
uint8_t AT_data2[]="AT+CGCLASS=\"B\"";
uint8_t AT_data3[]="AT+CGDCONT=1,\"IP\",\"CMNET\"";
uint8_t AT_data4[]="AT+CGATT=1";
uint8_t AT_data5[]="AT+CIPCSGP=1,\"CMNET\"";
uint8_t AT_data6[]="AT+CIPSTART=\"TCP\",\"@SERVER_IP\",\"@SERVER_PORT\"";
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
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);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

void sim900a_init(){
HAL_Delay(2000);
HAL_UART_Transmit(&huart1, AT_data1, sizeof(AT_data1), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data2, sizeof(AT_data2), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data3, sizeof(AT_data3), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data4, sizeof(AT_data4), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data5, sizeof(AT_data5), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data6, sizeof(AT_data6), 10);
HAL_Delay(1000);
}

将每个AT指令依次发送至串口,要小心后面的等待时间可能会导致初始化失败。

然后完整代码我就附在下方了,关于串口配制之类的可以查看我的上一篇文章,与上一篇文章相同

STM32(HAL库)串行通信控制继电器-CSDN博客

#include "main.h"
#include "string.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
uint8_t Receive_data[3];
uint8_t Returns_data[11]="@SERVER_RUN";
uint8_t Returns_data1[12]="@SERVER_STOP";
uint8_t Compare_data1[11]="@RESPON_RUN";
uint8_t Compare_data2[12]="@RESPON_STOP";
uint8_t AT_data1[]="AT+ECHO=0";
uint8_t AT_data2[]="AT+CGCLASS=\"B\"";
uint8_t AT_data3[]="AT+CGDCONT=1,\"IP\",\"CMNET\"";
uint8_t AT_data4[]="AT+CGATT=1";
uint8_t AT_data5[]="AT+CIPCSGP=1,\"CMNET\"";
uint8_t AT_data6[]="AT+CIPSTART=\"TCP\",\"@SERVER_IP\",\"@SERVER_PORT\"";
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
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);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

void sim900a_init(){
HAL_Delay(2000);
HAL_UART_Transmit(&huart1, AT_data1, sizeof(AT_data1), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data2, sizeof(AT_data2), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data3, sizeof(AT_data3), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data4, sizeof(AT_data4), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data5, sizeof(AT_data5), 10);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, AT_data6, sizeof(AT_data6), 10);
HAL_Delay(1000);
}


/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
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_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
    sim900a_init();
  /* USER CODE END 2 */

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

    /* USER CODE BEGIN 3 */

	 HAL_UART_Receive(&huart1, Receive_data, sizeof(Receive_data), 100);
	 if(strcmp((char*)Receive_data,(char*)Compare_data1)==0)
	 {
		 HAL_UART_Transmit(&huart1, Returns_data, 11, 100);
		 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
		 Receive_data[0]='0';
	 }

	 if(strcmp((char*)Receive_data,(char*)Compare_data2)==0)
	 	 {
	 		 HAL_UART_Transmit(&huart1, Returns_data1, 12, 100);
	 		 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
	 		Receive_data[0]='0';
	 	 }
  }
  /* USER CODE END 3 */
}

因为还是刚开是学习32很多纰漏还请见谅。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值