【STC15库函数上手笔记】4、USART串口
目錄
- 硬知識(shí)
- 串口初始化函數(shù)
- 串口1寫緩沖函數(shù)
- 串口2寫緩沖函數(shù)
- 串口1寫數(shù)據(jù)塊函數(shù)
- 串口2寫數(shù)據(jù)塊函數(shù)
- 模擬串口字節(jié)發(fā)送函數(shù)
- 模擬串口寫數(shù)據(jù)塊函數(shù)
- 測(cè)試
- 硬件串口
- 模擬串口
- soft_uart.c
- soft_uart.h
- main.c
STC實(shí)驗(yàn)箱4
IAP15W4K58S4
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0
硬知識(shí)
摘自《STC庫(kù)函數(shù)使用參考》
串口初始化函數(shù)
USART_Configuration
COMx_InitDefine的定義見于文件"USART.H"。
UART_Mode:設(shè)置USART的工作模式:
UART_BRT_Use:使用的波特率發(fā)生器:
UART_BaudRate:使用的波特率,比如:
Morecommunicate:多機(jī)通訊允許:
UART_RxEnable:接收允許:
BaudRateDouble:波特率加倍(僅僅用于USART1):
UART_Interrupt:中斷允許或禁止:
UART_Polity:中斷的優(yōu)先級(jí):
UART_P_SW:切換IO:對(duì)于串口1的取值:
UART_P_SW:切換IO:對(duì)于串口2的取值:
UART_RXD_TXD_Short:內(nèi)部TXD與RXD同相緩沖輸出做中繼:對(duì)于串口1的取值:
串口1寫緩沖函數(shù)
TX1_write2buff
串口2寫緩沖函數(shù)
TX2_write2buff
串口1寫數(shù)據(jù)塊函數(shù)
PrintString1
串口2寫數(shù)據(jù)塊函數(shù)
PrintString2
模擬串口字節(jié)發(fā)送函數(shù)
TxSend
模擬串口寫數(shù)據(jù)塊函數(shù)
PrintString
測(cè)試
硬件串口
#include "./Drivers/config.h" #include "./Drivers/delay.h"#include "./Drivers/USART.h" #include <stdio.h>char putchar(char Char) {TX1_write2buff(Char);return Char; }void UART_config(void) {COMx_InitDefine COMx_InitStructure; //結(jié)構(gòu)定義COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use = BRT_Timer1; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 一般 110 ~ 115200COMx_InitStructure.UART_RxEnable = ENABLE; //接收允許, ENABLE或DISABLECOMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLECOMx_InitStructure.UART_Interrupt = ENABLE; //中斷允許, ENABLE或DISABLECOMx_InitStructure.UART_Polity = PolityLow; //中斷優(yōu)先級(jí), PolityLow,PolityHighCOMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //切換端口, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必須使用內(nèi)部時(shí)鐘)COMx_InitStructure.UART_RXD_TXD_Short = DISABLE; //內(nèi)部短路RXD與TXD, 做中繼, ENABLE,DISABLEUSART_Configuration(USART1, &COMx_InitStructure); //初始化串口1 USART1,USART2 }void main(void) {u8 i;UART_config();EA = 1;PrintString1("IAP15W4K58S4 UART1 Test Prgramme!\r\n"); //USART1發(fā)送一個(gè)字符串printf("printf測(cè)試:%d\r\n", (short)1);while (1){delay_ms(1);if(COM1.RX_TimeOut > 0) //超時(shí)計(jì)數(shù){if(--COM1.RX_TimeOut == 0){if(COM1.RX_Cnt > 0){for(i=0; i<COM1.RX_Cnt; i++) TX1_write2buff(RX1_Buffer[i]); //收到的數(shù)據(jù)原樣返回}PrintString1(RX1_Buffer); //收到的數(shù)據(jù)原樣返回 另一種形式COM1.RX_Cnt = 0;}}} }模擬串口
在soft_uart.c中修改所用引腳:
soft_uart.c
/************* 功能說(shuō)明 **************本文件為模擬串口發(fā)送程序, 一般為測(cè)試監(jiān)控用.串口參數(shù):9600,8,n,1.可以根據(jù)主時(shí)鐘自動(dòng)適應(yīng).******************************************/#include "soft_uart.h"sbit P_TXD = P3^1; //定義模擬串口發(fā)送端,可以是任意IOchar putchar(char Char) {TxSend(Char);return Char; }//======================================================================== // 函數(shù): void BitTime(void) // 描述: 位時(shí)間函數(shù)。 // 參數(shù): none. // 返回: none. // 版本: VER1.0 // 日期: 2013-4-1 // 備注: //======================================================================== void BitTime(void) {u16 i;i = ((MAIN_Fosc / SOFT_UART_BAUD) * 1000) / 13000L - 1; //根據(jù)主時(shí)鐘來(lái)計(jì)算位時(shí)間while(--i); }//======================================================================== // 函數(shù): void TxSend(uchar dat) // 描述: 模擬串口發(fā)送一個(gè)字節(jié)。9600,N,8,1 // 參數(shù): dat: 要發(fā)送的數(shù)據(jù)字節(jié). // 返回: none. // 版本: VER1.0 // 日期: 2013-4-1 // 備注: //======================================================================== void TxSend(u8 dat) {u8 i;EA = 0;P_TXD = 0;BitTime();for(i=0; i<8; i++){if(dat & 1) P_TXD = 1;else P_TXD = 0;dat >>= 1;BitTime();}P_TXD = 1;EA = 1;BitTime();BitTime(); }//======================================================================== // 函數(shù): void PrintString(unsigned char code *puts) // 描述: 模擬串口發(fā)送一串字符串。9600,N,8,1 // 參數(shù): *puts: 要發(fā)送的字符指針. // 返回: none. // 版本: VER1.0 // 日期: 2013-4-1 // 備注: //======================================================================== void PrintString(unsigned char code *puts) {for (; *puts != 0; puts++) TxSend(*puts); }soft_uart.h
#ifndef __SOFT_UART_H #define __SOFT_UART_H#include "config.h" #include <stdio.h>#define SOFT_UART_BAUD 9600void TxSend(u8 dat); void PrintString(unsigned char code *puts);#endifmain.c
#include "./Drivers/config.h" #include "./Drivers/delay.h"#include "./Drivers/soft_UART.h"void main(void) {while (1){PrintString("IAP15W4K58S4 Soft UART Test Prgramme!\r\n");printf("printf測(cè)試:%d\r\n", (short)1);delay_ms(500);} }總結(jié)
以上是生活随笔為你收集整理的【STC15库函数上手笔记】4、USART串口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android反编译工具总结
- 下一篇: Ubuntu 自动关机命令