200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 使用stm32 SIM800A发送短信

使用stm32 SIM800A发送短信

时间:2020-07-08 14:40:34

相关推荐

使用stm32 SIM800A发送短信

关于GSM800A发送短信 只需要配置好USART发送AT指令 模块会自动执行指令完成操作

//主函数部分int main(void){ Usart1_Init(115200); Usart2_Init(115200);Delay_Init(72);while(1){/*****************************************************************************************函数名 :GSM发送短信功能 : 由PA2(usart2)发送AT指令向sim800A的TXD 完成发送短信 PA3是读取sim800a的数据(未写)出口参数: PA2->TXD PA3(未使用)入口参数:发送的数据返回值 :无******************************************************************************************/Usart2_Send_string((u8 *)"AT\r\n"); //发送AT字符串Delay_Ms(2000);Usart2_Send_string((u8 *)"AT+CMGF=1\r\n"); //发送AT字符串Delay_Ms(2000);Usart2_Send_string((u8 *)"AT+CMGS=\"18176219627\" \r\n"); //发送AT字符串Delay_Ms(2000);Usart2_Send_string((u8 *)"huangqiubin\r\n"); //发送AT字符串Delay_Ms(2000);// Usart2_Send_string((u8 *)"1A\r\n"); //发送AT字符串 二进制发送 Usart2_Send_byte(0x1a);Delay_Ms(2000);while(1){printf("我的鸡汤完成了!!!!啊哈哈哈哈哈");}}}//串口配置部分#include "usart2.h"/*****************************************************************************************函数名 :功能 :串口1初始化出口参数:入口参数:bound 波特率返回值 :说明 :IO PA2 TX PA3RX******************************************************************************************/void Usart2_Init(u32 bound){#if 0u16 DIV_Mantissa;//整数部分float DIV_Fraction;//小数部分RCC->APB2ENR |=1<<2;//PA时钟RCC->APB2ENR |=1<<14;//串口一时钟//PA9GPIOA->CRH &=0XFFFFFF0F;//清0GPIOA->CRH |=0X000000B0;//复用推挽输出//PA10GPIOA->CRH &=0XFFFFF0FF;//清0GPIOA->CRH |=0X00000400;//复用推挽输出DIV_Fraction=(float)72000000/16/bound;//计算波特率DIV_Mantissa=(u16)DIV_Fraction;//整数部分DIV_Fraction=DIV_Fraction-DIV_Mantissa;//得出小数部分USART2->BRR = (DIV_Mantissa<<4 )+(DIV_Fraction*16);USART2->CR1 |= 1<<2|1<<3|1<<13;//开启接收使能 发送使能 串口使能#elseUSART_InitTypeDef USART_InitStruct;//定义串口类型结构体变量GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO类型结构体变量NVIC_InitTypeDef NVIC_InitStruct; //定义中断向量控制器的变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);//开启串口时钟 PA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//开启串口时钟 PA时钟/*****TX********/GPIO_InitStruct.GPIO_Mode =GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Pin =GPIO_Pin_2;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);/*****RX********/GPIO_InitStruct.GPIO_Mode =GPIO_Mode_IN_FLOATING;GPIO_InitStruct.GPIO_Pin =GPIO_Pin_3;GPIO_Init(GPIOA, &GPIO_InitStruct);USART_InitStruct.USART_BaudRate =bound;//设置波特率USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode= USART_Mode_Tx|USART_Mode_Rx;//全双工模式USART_InitStruct.USART_Parity =USART_Parity_No; //无校验USART_InitStruct.USART_StopBits =USART_StopBits_1; //一个停止位USART_InitStruct.USART_WordLength=USART_WordLength_8b; //8位数据USART_Init(USART2, &USART_InitStruct);USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //使能串口接收中断USART_ITConfig(USART2,USART_IT_IDLE ,ENABLE); //使能串口空闲中断USART_Cmd(USART2, ENABLE); //使能串口NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;//通道选择NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; //使能NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct);#endif}/*****************************************************************************************函数名 :功能 :发送一字节函数出口参数:入口参数:发送的数据返回值 :******************************************************************************************/void Usart2_Send_byte(u8 data){// while(!(USART1->SR & 1<<6));//等待发送完成 //USART1->DR =data; //发送数据一个字节while(!USART_GetFlagStatus(USART2, USART_FLAG_TXE));USART_SendData(USART2, data);}/*****************************************************************************************函数名 :功能 :读取一个字节出口参数:入口参数:返回值 :返回读到的字节说明 :堵塞式接收******************************************************************************************/u8 Usart2_Read_byte(void){//while(!(USART1->SR & 1<<5));//等待接收完成// return USART1->DR; while(!USART_GetFlagStatus(USART2,USART_FLAG_RXNE));return USART_ReceiveData(USART2);}void Usart2_Send_string(u8 *ch){while(*ch!='\0'){Usart2_Send_byte(*ch++);}}u8 Usart2_Readbuff[100];//保存来自电脑的数据void Usart2_Read_string(void){u8 ch;u8 Usart2_Readlen=0;//接收长度while(1){ch=Usart2_Read_byte();//读取一个字节if(ch!='\r'&&ch!='\n')//判断是否是结束符{Usart2_Readbuff[Usart2_Readlen++]=ch;//循环保存字符 组成字符串}if(ch=='\n')//最后一个字符 结束接收{Usart2_Readbuff[Usart2_Readlen]='\0';//添加结束符break;}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。