最近要驅動了sim800l發現自己用的程式好亂,今天寫個死的
#include
"usart.h"
#include
"stdio.h"
#include
"string.h"
#include
"delay.h"
/***@function:把串列埠接收到的資料都存在usart_rx_buf中,把它定義成為全域性變數以供使用
* 另外,接收完成之後,usart1_rx_sta的第15位還是1的狀態,使用完資料記得清零
* 不然無法進行第二次接收
*//**用庫函式配置優先順序,最近喜歡庫函式和暫存器兩種混著用
nvic_inittypedef nvic_initstructure;
nvic_initstructure.nvic_irqchannel = usart1_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority=3 ;//搶占優先順序3
nvic_initstructure.nvic_irqchannelsubpriority = 3; //子優先順序3
nvic_initstructure.nvic_irqchannelcmd = enable; //irq通道使能
nvic_init(&nvic_initstructure); //根據指定的引數初始化vic暫存器
*/u8 usart1_rx_buf[usart1_receive_len]
;//乙個位元組長度型別的陣列
u16 usart1_rx_sta=0;
//接收狀態標記
void
genralusart_init
(int pclk2,
int bound)
/*通過串列埠傳送乙個字串*/
void
sendstrtousart1
(u8* str)
}/*檢視usart接收的資料是否含有自己的字串*/
u8*usart_check_cmd
(u8* str)
return
(u8*
)rstr;
}/**
*@par:cmd:傳送的命令
* ack:期望的響應
* waittime:超時時間,n*10ms
*@ret:0成功 1失敗
*/u8 usart_send_cmd
(u8* cmd,u8* ack,u16 waittime)
//接收到資料後清除狀態位
usart1_rx_sta=0;
}if(waittime==0)
return1;
//到時間未得到響應}}
return0;
}/**
*@function:一次中斷處理乙個位元組資料
*@attention:0x0d:/r 0x0a:/n
*/void
usart1_irqhandler
(void
)else
//還沒收到/r}}
}}/************************printf()函式*************************************/
struct __file
;///* file is typedef』 d in stdio.h. */
file __stdout;
//重定向fputc函式
//printf的輸出,指向fputc,由fputc輸出到串列埠
//這裡使用串列埠1(usart1)輸出printf資訊
intfputc
(int ch, file *f)
/************************printf()函式*************************************/
USART串列埠驅動SIM800L或者ESP8266
最近要驅動了sim800l發現自己用的程式好亂,今天寫個死的 include usart.h include stdio.h include string.h include delay.h function 把串列埠接收到的資料都存在usart rx buf中,把它定義成為全域性變數以供使用 另外...
usart串列埠使用
stm32串列埠使用 1 printf函式呼叫 iar的option設定中將printf庫開啟再編寫printf重定向到usartn的函式 int fputc int ch,file f return ch 使用usb轉ttl直接連線mcu與計算機即可。除ttl外,rs232與rs485都可作為串列...
USART 串列埠通訊
現在我使用串列埠一般都是列印除錯資訊或者藍芽通訊 只會用到tx和rx,不需要用到時鐘訊號線,所以是非同步半雙工 如果想要操作暫存器,那就要看功能框圖了 1.tx傳送資料引腳 rx接受資料引腳,所以要把引腳配置為串列埠復用引腳 每個串列埠對應的引腳都不一樣,這樣檢視手冊 2.傳送資料暫存器和接收資料暫...