STM32单片机串口发送ASCII码

例如单片机向串口发送ASCII码$01,play只需要发送其对应的十六进制数,如下:

$对应0x24

0对应0x30 

1对应0x31 

,对应0x2C

P对应0x70 

l对应0x6C 

a对应0x61 

y对应0x79 

     通过串口发送所对应的十六进制数就相当于发送了ASCII码,例如单片机发送$01,play和发送24 30 31  2C 70 6C 61 79是一样的。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
发送短信需要使用SIM800L模块和STM32单片机进行通信,以下是大致的步骤: 1. 安装SIM800L模块并将其连接到STM32单片机。SIM800L模块可以通过串口单片机通信,因此必须将模块上的TX和RX引脚连接到单片机上的相应引脚。 2. 初始化串口通信。首先需要设置单片机串口通信参数,包括波特率、数据位、停止位和校验位等,然后通过串口发送AT指令,以检查SIM800L模块是否正常工作。 3. 发送短信。发送短信需要使用AT指令,首先需要设置短信中心号码(SMSC)和接收方手机号码,然后通过AT+CMGS指令将短信内容发送给SIM800L模块。 以下是一个简单的示例代码,可以用于在STM32单片机发送短信: ``` #include "stm32f10x.h" #include "stdio.h" #include "string.h" #define BUFFERSIZE 100 void USART1_Init(void); void USART1_SendChar(char ch); void USART1_SendString(char* str); void delay_ms(uint16_t ms); void SIM800L_SendCommand(char* cmd); void SIM800L_SendSMS(char* phone_number, char* message); int main(void) { char phone_number[] = "+8612345678901"; // 接收方手机号码 char message[] = "Hello, this is a test message!"; // 短信内容 USART1_Init(); SIM800L_SendCommand("AT\r\n"); // 发送AT指令 delay_ms(100); SIM800L_SendSMS(phone_number, message); // 发送短信 while(1) { } } void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; 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(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void USART1_SendChar(char ch) { USART_SendData(USART1, (uint8_t)ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } void USART1_SendString(char* str) { while(*str) { USART1_SendChar(*str); str++; } } void delay_ms(uint16_t ms) { volatile uint32_t nCount; RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); nCount = (RCC_Clocks.HCLK_Frequency / 10000) * ms; for(; nCount != 0; nCount--); } void SIM800L_SendCommand(char* cmd) { USART1_SendString(cmd); delay_ms(1000); } void SIM800L_SendSMS(char* phone_number, char* message) { char buffer[BUFFERSIZE]; memset(buffer, 0, BUFFERSIZE); sprintf(buffer, "AT+CMGF=1\r\n"); // 设置短信格式为文本格式 SIM800L_SendCommand(buffer); memset(buffer, 0, BUFFERSIZE); sprintf(buffer, "AT+CMGS=\"%s\"\r\n", phone_number); // 设置接收方手机号码 SIM800L_SendCommand(buffer); memset(buffer, 0, BUFFERSIZE); sprintf(buffer, "%s\x1A", message); // 设置短信内容 SIM800L_SendCommand(buffer); } ``` 在上面的示例代码中,首先通过USART1_Init()函数初始化串口通信。然后在main()函数中,先发送一个AT指令以检查SIM800L模块是否正常工作,然后调用SIM800L_SendSMS()函数发送短信。 SIM800L_SendSMS()函数中,首先使用AT+CMGF=1指令设置短信格式为文本格式,然后使用AT+CMGS指令设置接收方手机号码,并将短信内容发送给SIM800L模块。注意,短信内容需要以Ctrl+Z字符(ASCII码为0x1A)结尾。 以上是一个简单的示例代码,您可以根据实际情况进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值