網(wǎng)站ip地址 a記錄鎮(zhèn)江百度關(guān)鍵詞優(yōu)化
今日嘗試自己操作寄存器編寫函數(shù),使用SCI通信外設(shè) 發(fā)送與接收數(shù)據(jù)
文章提供測試代碼講解、完整工程下載、測試效果圖
目錄
添加創(chuàng)建自己的庫文件:
編寫SCI發(fā)送函數(shù):
主函數(shù)調(diào)用示例:
測試效果圖:
完整工程下載:
添加創(chuàng)建自己的庫文件:
這里提一筆怎么添加創(chuàng)建自己的庫文件:
直接右鍵添加 Header File 和 Source File 就行了,文件后綴.c與.h別忘了自己加上
創(chuàng)建的.h文件會自己給你加上 編譯條件語句
之前想給主文件寫個.h文件的,這在keil的操作是合法的,但在ccs這會胡亂報錯,不知為何
編寫SCI發(fā)送函數(shù):
下面是我寫的三個SCI發(fā)送函數(shù)的具體實現(xiàn),分別是發(fā)送一個字節(jié)、發(fā)送一串字符串 、以及自定義的SCI_printf函數(shù)
// SCIA 發(fā)送一個字節(jié) void SCIa_TransmitData(uint16_t data) {while (SciaRegs.SCIFFTX.bit.TXFFST != 0){//考慮添加超時邏輯}SciaRegs.SCITXBUF.all = data; }//SCIA 發(fā)送字符串 void SCIa_TransmitString(unsigned char *string) {int i;i = 0;while(string[i] != '\0'){SCIa_TransmitData(string[i]);i++;} }// 自定義printf函數(shù) void SCIa_Printf(char *fmt,...) {unsigned char UsartPrintfBuf[128];//最大長度1128va_list ap;unsigned char *pStr = UsartPrintfBuf;va_start(ap, fmt);vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap); //格式化va_end(ap);while(*pStr != 0 ){SCIa_TransmitData(*pStr++); //逐個字節(jié)發(fā)送//等待 發(fā)射器緩沖區(qū)和移位寄存器均為空while(SciaRegs.SCICTL2.bit.TXEMPTY == 0){// 超時邏輯}// 檢查傳輸錯誤if (SciaRegs.SCIRXST.bit.FE || SciaRegs.SCIRXST.bit.OE || SciaRegs.SCIRXST.bit.PE){// 處理錯誤SciaRegs.SCIRXST.bit.RXERROR = 0; // 清除錯誤標志}} }
主函數(shù)調(diào)用示例:
這里展示了函數(shù)在主函數(shù)的調(diào)用情況:
DEVICE_DELAY_US(500000);? 的延時邏輯是冗余的
實例程序中用的發(fā)送主要是 SCIa_Printf 函數(shù)的,因為它用起來最方便,有關(guān)其余發(fā)送函數(shù)的調(diào)用示例在主函數(shù)下面的注釋中也有提到:
?
測試效果圖:
能夠成功的一個一個回傳發(fā)來的字符并計數(shù):
完整工程下載:
?https://download.csdn.net/download/qq_64257614/90464717