logo资料库

SIM800L模块发送短信.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
SIM800L模块发送短信 模块发送短信 因为项目需求需要使用到SIM短信模块,记录下SIM模块的使用记录。 1,准备工作,准备工作 需要一块SIM模块,我使用的是SIM800L模块,淘宝可以购买到,如图所示, 推荐购买这一款,板上集成了电压模块,不需要单独使用3.7v供电,比较方便。 一张电话卡,自己手机的电话卡即可,同时还需要一个卡套,不然卡放不进去。 2,调试工作,调试工作 插上卡,上电以后,模块会自动寻找信号,串口助手发送AT, 模块返回ok,表示成功。 然后发送 AT+CMGF=1 将短信模式设置为 text mode (模块默认是 pdu mode), 然后发送 AT+CMGS=“此处输入对应的电话号码 短信内容输入完成以后,发送十六进制的 如果一切顺利,此时你的手机可以收到你的短信。 发送十六进制的0x1a完成发送 此处输入对应的电话号码”,等待模块返回 ‘>’ 字符,输入短信内容, 完成发送,记住,是16进制的。 3,单片机移植 ,单片机移植 已经知道了at指令的流程,就需要配置串口就行了。 串口.h文件的配置,使用的stm32的串口2 // ´®¿Ú2-USART2 #define DEBUG_USARTx USART2 #define DEBUG_USART_CLK RCC_APB1Periph_USART2 #define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd #define DEBUG_USART_BAUDRATE 115200 // USART GPIO Òý½Åºê¶¨Òå #define DEBUG_USART_GPIO_CLK RCC_APB2Periph_GPIOA #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd #define DEBUG_USART_TX_GPIO_PORT GPIOA #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_2 #define DEBUG_USART_RX_GPIO_PORT GPIOA #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_3 #define DEBUG_USART_IRQ USART2_IRQn #define DEBUG_USART_IRQHandler USART2_IRQHandler c文件的定义 void USART_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // ´ò¿ª´®¿ÚGPIOµÄʱÖÓ DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE); // ´ò¿ª´®¿ÚÍâÉèµÄʱÖÓ DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE); // ½«USART TxµÄGPIOÅäÖÃΪÍÆÍ츴ÓÃģʽ GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure); // ½«USART RxµÄGPIOÅäÖÃΪ¸¡¿ÕÊäÈëģʽ GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure); // ÅäÖô®¿ÚµÄ¹¤×÷²ÎÊý // ÅäÖò¨ÌØÂÊ USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE; // ÅäÖà ÕëÊý¾Ý×Ö³¤ USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ÅäÖÃֹͣλ USART_InitStructure.USART_StopBits = USART_StopBits_1; // ÅäÖÃУÑéλ USART_InitStructure.USART_Parity = USART_Parity_No ; // ÅäÖÃÓ²¼þÁ÷¿ØÖÆ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // ÅäÖù¤×÷ģʽ£¬ÊÕ·¢Ò»Æð USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // Íê³É´®¿ÚµÄ³õʼ»¯ÅäÖà USART_Init(DEBUG_USARTx, &USART_InitStructure); // ʹÄÜ´®¿Ú USART_Cmd(DEBUG_USARTx, ENABLE); } 接下来是发送函数的定义 只用到了三个函数 “ /***************** ·发送字符**********************/ void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch) { /* ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ýµ½USART */ USART_SendData(pUSARTx,ch); /* µÈ´ý·¢ËÍÊý¾Ý¼Ä´æÆ÷Ϊ¿Õ */ while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); } /***************** 发送字符串**********************/ void Usart_SendString( USART_TypeDef * pUSARTx, char *str) { unsigned int k=0; do { Usart_SendByte( pUSARTx, *(str + k) ); k++; } while(*(str + k)!='\0'); /* µÈ´ý·¢ËÍÍê³É */ while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)!=SET); } /***************** 发送16进制数**********************/ void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch) { uint8_t temp_h, temp_l; /* È¡³ö¸ß°Ëλ */ temp_h = (ch&0XFF00)>>8; /* È¡³öµÍ°Ëλ */ temp_l = ch&0XFF; /* ·¢Ë͸߰Ëλ */ USART_SendData(pUSARTx,temp_h); while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); /* ·¢Ë͵ͰËλ */ USART_SendData(pUSARTx,temp_l); while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); } 只用这三个函数就够了 ```bash Usart_SendString( DEBUG_USARTx,"AT\r\n"); delay(); Usart_SendString( DEBUG_USARTx,"AT+CMGF=1\r\n"); delay(); Usart_SendString( DEBUG_USARTx,"AT+CMGS=\"填入自己的手机号\"\r\n"); delay(); Usart_SendString( DEBUG_USARTx,"warning! warning !\r\n"); delay(); // printf("0x%x",aa); Usart_SendHalfWord(DEBUG_USARTx,0x1a); =按照顺序发送at指令,就可以了。 sim800l的最简单的发送短信在单片机上面就这样跑起来了。 谢谢观看 作者:菜鸡一枚。。。。
分享到:
收藏