欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32單片機+SIM900A怎么讀取信息問題
[打印本頁]
作者:
wjk921
時間:
2023-4-18 01:52
標題:
STM32單片機+SIM900A怎么讀取信息問題
新消息的返回,比如:+CMTI:“SM”,5之類的,收到的新消息,存放在卡位置5中,那這里是不是要寫一個返回位置?然后去讀取位置5?這部分在STM32中怎么寫呀?求教!!!!!
stm32+SIM900A讀取程序要怎么寫?
作者:
Hephaestus
時間:
2023-4-18 10:06
就是個串口處理程序,一點兒思路都沒有嗎?
作者:
li64331218
時間:
2023-4-18 10:42
看看stm32 的串口例程,就有辦法了
作者:
15819505736
時間:
2023-4-18 18:02
以下是使用STM32F409單片機通過SIM900A模塊讀取的代碼示例,僅供參考: #define USART2_RX_BUF_SIZE 256 // 定義串口接收緩沖區大小 #define SMS_BUF_SIZE 256 // 定義緩沖區大小 uint8_t usart2_rx_buf[USART2_RX_BUF_SIZE]; // 串口接收緩沖區 uint8_t sms_buf[SMS_BUF_SIZE]; // 緩沖區 void SIM900A_Init(void) { // 初始化USART2串口 USART_InitTypeDef USART_InitStruct; USART_StructInit(&USART_InitStruct); USART_InitStruct.USART_BaudRate = 9600; // 波特率為9600 USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStruct); USART_Cmd(USART2, ENABLE); // 等待SIM900A模塊正常工作 delay_ms(10000); // 發送AT指令到SIM900A USART_SendString(USART2, "AT+CMGF=1\r\n"); // 設置SIM900A為文本模式 delay_ms(1000); } int8_t SIM900A_ReadSMS(uint8_t index) { // 讀取SIM900A收到的 USART_SendString(USART2, "AT+CMGR="); USART_SendByte(USART2, index); USART_SendString(USART2, "\r\n"); delay_ms(1000); // 讀取內容 uint8_t i = 0; while (usart2_rx_buf) { if (strstr((char *)&usart2_rx_buf, "+CMGR") != NULL) { i += strstr((char *)&usart2_rx_buf, "+CMGR") - (char *)&usart2_rx_buf; i += strstr((char *)&usart2_rx_buf, ",") - (char *)&usart2_rx_buf + 1; i += strstr((char *)&usart2_rx_buf, ",") - (char *)&usart2_rx_buf + 1; i += strstr((char *)&usart2_rx_buf, ",") - (char *)&usart2_rx_buf + 1; i += strstr((char *)&usart2_rx_buf, ",") - (char *)&usart2_rx_buf + 1; while (usart2_rx_buf != '\r') i++; i += 2; // 跳過\r\n uint8_t j = 0; while (usart2_rx_buf != '\r' && j < SMS_BUF_SIZE) { sms_buf[j++] = usart2_rx_buf[i++]; } sms_buf[j] = '\0'; return 0; // 讀取成功 } i++; if (i >= USART2_RX_BUF_SIZE) break; } return -1; // 讀取失敗 } int main(void) { SIM900A_Init(); // 初始化SIM900A SIM900A_ReadSMS(1); // 讀取SIM900A中索引為1的 USART_SendString(USART2, sms_buf);// 將讀取到的發送出去 while (1); } 以上代碼僅供參考,可以根據自己的需求進行相應的修改和仿照。需要注意的是,以上代碼中使用了一個簡單的延時函數delay_ms()。在實際開發中,推薦使用STM32F409單片機中的定時器等高精度等待函數代替。另外,由于USART端口的通信速率是9600bps,如果SMS信息較長,可能會出現數據丟失的情況。
作者:
hezezeze
時間:
2023-4-18 21:53
可以去看一些相關資料,普中或者正點原子的官方論壇上面,找參考例子
作者:
ankangyu
時間:
2023-4-19 10:59
就是串口按著SIM900A使用手冊上的命令發過去就行了,讀取就是監視串口收到的數據,可以使用串口中斷程序
作者:
拓荒者pioneer
時間:
2023-4-19 15:31
B站正點原子的講的還是挺清晰的,就看有關串口的問題就好了
作者:
wjk921
時間:
2023-4-20 17:52
li64331218 發表于 2023-4-18 10:42
看看stm32 的串口例程,就有辦法了
好的,謝謝。馬上去看
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1