www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]最近開始使用stm8s103k3單片機(jī)了。據(jù)說很好,確實(shí)不錯(cuò)。前幾天已經(jīng)試過了GPIO,Timer2,ADC的功能,都比較容易,唯獨(dú)串口UART使用,破費(fèi)周折,寫出來,供大家借鑒。我使用的是stm8s103k3,32腳單片機(jī),這個(gè)使用手冊(cè)上

最近開始使用stm8s103k3單片機(jī)了。據(jù)說很好,確實(shí)不錯(cuò)。前幾天已經(jīng)試過了GPIO,Timer2,ADC的功能,都比較容易,唯獨(dú)串口UART使用,破費(fèi)周折,寫出來,供大家借鑒。

我使用的是stm8s103k3,32腳單片機(jī),這個(gè)使用手冊(cè)上說了UART1,UART2,UART3。但是引腳的功能圖上只有UART1,并且你打開stm8s103k.h的頭文件,里面也只有UART1寄存器的定義說明。所以我認(rèn)為只有UART1。既然有這個(gè)功能,那就用吧,我以為直接可以連接到電腦的串口(COM1),就可以使用了,其實(shí)不可以。單片機(jī)即使寫著提供UART通訊功能,也要連接MAX232轉(zhuǎn)接芯片,我就在這里耽誤了許多時(shí)間。

1、使用stm8s103上的串口和計(jì)算機(jī)com口通許的硬件連接:

2、軟件設(shè)置

(1)發(fā)送數(shù)據(jù)配置

1)編程UART_CR1的M位來定義字長。
2)在UART_CR3中編程停止位的位數(shù)。
3)按下列順序編寫波特率寄存器選擇要求的波特率。
a)UART_BRR2
b)UART_BRR1
4)設(shè)置UART_CR2中的TEN位來使能發(fā)送
5)把要發(fā)送的數(shù)據(jù)寫進(jìn)UART_DR寄存器

main.c程序如下:


#include "stm8s103k.h"

void UART1_Init(void)
{
UART1_CR2=0x00;//使發(fā)送禁用TEN=0;
UART1_CR1=0x00;//設(shè)置M字長,8位數(shù)據(jù)位
UART1_CR3=0x00;//1位停止位

UART1_BRR2=0x00;//00-0d:9600(fcpu=fmaster=2MHz)
UART1_BRR1=0x0d;//00-1a:4800; 01-34:2400

UART1_CR2=0x08;
}
main()
{
//fmaster=fcpu=2MHz
CLK_ECKR=0x00;
CLK_ICKR=0x01;
CLK_CMSR=0xe1;

CLK_SWR=0xe1;
CLK_CKDIVR=0x18;

UART1_Init();

while (1)
{
unsigned char i;

while(!(UART1_SR & 0x80));//發(fā)送寄存器數(shù)據(jù)是否轉(zhuǎn)移完

UART1_CR2=0x00;//a處
UART1_DR=0xB6;//要發(fā)送的數(shù)據(jù)
UART1_CR2=0x08;//b處

while((UART1_SR & 0x40) ==0);//發(fā)送是否完成

}
}

上面的代碼是我反復(fù)實(shí)驗(yàn)過的,如果不加a和b處代碼,則接收的數(shù)據(jù)不穩(wěn)定,比如發(fā)送5,接收到的數(shù)據(jù)的串口多次開閉,則接收的數(shù)據(jù)可能是0xB6,或0x67,或0x3B.

(2)接收數(shù)據(jù)

1)編程UART_CR1的M位來定義字長。
2)在UART_CR3中編程停止位的位數(shù)。
3)按下列順序編寫波特率寄存器選擇要求的波特率。
a)UART_BRR2
b)UART_BRR1
4)設(shè)置UART_CR2中的REN位來使能接收
5)讀UART_DR寄存器
a)查詢:查詢SR中標(biāo)志位RXNE (讀數(shù)據(jù)寄存器非空)
b)中斷:需使能CR2中的RIEN(接收中斷使能)

標(biāo)志位查詢方式:
初始化:
void UART1_Init(void)
{
UART1_CR1 = 0x00; //8bit
UART1_CR3 = 0x00;//1 stop bit
UART1_BRR2 = 0x01;
UART1_BRR1 = 0x1A;//4800 baud rate
UART1_CR2 = 0x04;//enable REN
}

Main()函數(shù):

while (!(UART1_SR & 0x20));//Loop until the UART1 Receive Data Register is not empty
RxBuffer= UART1_DR; //Store the received byte in RxBuffer


中斷方式:
初始化:
void UART1_Init(void)
{
UART1_CR1 = 0x00; //8bit
UART1_CR3 = 0x00;//1 stop bit
UART1_BRR2 = 0x01;
UART1_BRR1 = 0x1A;//4800 baud rate
UART1_CR2 = 0x24;//enable REN and RIEN
}
UART1接收中斷函數(shù):
@far @interrupt void UART1_RX_IRQHandler (void)
{
RxBuffer = UART1_DR; //Store the received byte in RxBuffer
return;
}
UART1接收中斷向量(設(shè)置中斷向量,即將中斷服務(wù)程序的入口填寫到中斷向量表中)
struct interrupt_vector const _vectab[] =
{
……
{0x82, UART1_RX_IRQHandler},
……
}

(3)特別注意波特率的計(jì)算設(shè)置方式

波特率通過配置16位除法器UART_DIV來設(shè)置



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在現(xiàn)代電子系統(tǒng)中,串口通信(UART/USART)是一種廣泛應(yīng)用的通信方式,尤其在微控制器(MCU)領(lǐng)域。STM32系列MCU以其高性能、低功耗和豐富的外設(shè)資源,成為許多嵌入式系統(tǒng)開發(fā)的首選。在某些情況下,硬件串口資源可...

關(guān)鍵字: STM32 串口通信

在現(xiàn)代嵌入式系統(tǒng)開發(fā)中,STM32微控制器(MCU)憑借其強(qiáng)大的功能和靈活的配置,成為了眾多開發(fā)者的首選。其中,串口通信作為MCU與外界進(jìn)行數(shù)據(jù)交換的重要手段,其重要性不言而喻。本文將詳細(xì)介紹STM32的串口通信,包括其...

關(guān)鍵字: STM32 串口通信

在現(xiàn)代工業(yè)自動(dòng)化控制系統(tǒng)中,可編程邏輯控制器(PLC)作為核心設(shè)備,廣泛應(yīng)用于各種工業(yè)控制場(chǎng)景中。然而,在某些特定情況下,我們可能需要在沒有PLC的條件下,通過計(jì)算機(jī)直接控制變頻器。此時(shí),串口調(diào)試工具便成為了一種實(shí)用的解...

關(guān)鍵字: PLC 變頻器 串口通信

UART(通用異步收發(fā)器)串口通信是FPGA設(shè)計(jì)中常見的通信方式之一。本文將介紹FPGA入門基礎(chǔ)中的UART串口通信設(shè)計(jì),并附上相應(yīng)的代碼示例。

關(guān)鍵字: UART 串口通信 verilog

上位機(jī)串口通信是指在上位機(jī)(通常是計(jì)算機(jī)或微控制器)與外部設(shè)備之間通過串行通信協(xié)議進(jìn)行數(shù)據(jù)傳輸和通信的過程。在串口通信中,數(shù)據(jù)以位為單位按順序傳送,通常使用一個(gè)或兩個(gè)物理線路(通常是兩條線)來實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收。

關(guān)鍵字: 上位機(jī) 串口通信

串口通信(Serial Communication)是一種常用的數(shù)據(jù)傳輸方式,它通過串行數(shù)據(jù)線逐位傳輸數(shù)據(jù),具有成本低、簡(jiǎn)單易用、可靠性高等優(yōu)點(diǎn)。在工業(yè)控制、通信設(shè)備、嵌入式系統(tǒng)等領(lǐng)域得到廣泛應(yīng)用。

關(guān)鍵字: 串口通信 嵌入式系統(tǒng)

串口通信是一種常見的通信方式,用于在不同設(shè)備之間傳輸數(shù)據(jù)。它通過串行數(shù)據(jù)線(通常是一對(duì)TXD和RXD線)在設(shè)備之間進(jìn)行通信。串口通信具有簡(jiǎn)單、可靠、成本低等優(yōu)點(diǎn),因此在工業(yè)控制、嵌入式系統(tǒng)、數(shù)據(jù)采集等領(lǐng)域得到廣泛應(yīng)用。

關(guān)鍵字: 串口通信 串口編程

串口通信是一種常見的通信方式,主要應(yīng)用于計(jì)算機(jī)和其他設(shè)備之間的數(shù)據(jù)傳輸。它的主要原理是利用串行數(shù)據(jù)傳輸?shù)姆绞?,將?shù)據(jù)一位一位地按順序傳輸,而不是同時(shí)傳輸所有的數(shù)據(jù)。下面我們來看看串口通信的主要原理以及如何提高其傳輸速度。

關(guān)鍵字: 串口通信 串口速度

串口通信是一種常見的通信方式,它通過串行方式傳輸數(shù)據(jù)。串口通信的原理相對(duì)簡(jiǎn)單,主要涉及到數(shù)據(jù)位的傳輸和接收。在串口通信中,數(shù)據(jù)按照一定的波特率(baud rate)逐位傳輸。通常,一個(gè)字節(jié)的數(shù)據(jù)由8位組成,所以傳輸一個(gè)字...

關(guān)鍵字: 串口通信 波特率

RS 232串口通信是一種常見的串行通信協(xié)議,廣泛應(yīng)用于計(jì)算機(jī)和其他設(shè)備之間的數(shù)據(jù)傳輸。它是由美國電子工業(yè)協(xié)會(huì)(EIA)制定的一種標(biāo)準(zhǔn),規(guī)定了數(shù)據(jù)傳輸?shù)奈锢韺雍筒糠謹(jǐn)?shù)據(jù)鏈路層的規(guī)范。

關(guān)鍵字: RS 232 串口通信
關(guān)閉