日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【STC15库函数上手笔记】4、USART串口

發(fā)布時(shí)間:2023/12/9 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【STC15库函数上手笔记】4、USART串口 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 硬知識(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庫函數(shù)使用參考》

串口初始化函數(shù)

USART_Configuration

COMx_InitDefine的定義見于文件"USART.H"。

typedef struct {u8 UART_Mode; u8 UART_BRT_Use; u32 UART_BaudRate; u8 Morecommunicate; u8 UART_RxEnable; u8 BaudRateDouble;u8 UART_Interrupt; u8 UART_Polity; u8 UART_P_SW; u8 UART_RXD_TXD_Short; } COMx_InitDefine;

UART_Mode:設(shè)置USART的工作模式:

UART_BRT_Use:使用的波特率發(fā)生器:

UART_BaudRate:使用的波特率,比如:

COMx_InitStructure.UART_BaudRate = 115200ul; //UL表示是unsigned long

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

/************* 功能說明 **************本文件為模擬串口發(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í)鐘來計(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);#endif

main.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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。