標(biāo)題:
STM8新手求教串口!
[打印本頁(yè)]
作者:
滄浪
時(shí)間:
2017-8-22 17:33
標(biāo)題:
STM8新手求教串口!
跟著教程學(xué)STM8,代碼明明跟他們的一樣,卻總是有問(wèn)題,求教!
#include<iostm8s103k3.h>
#define uint unsigned int
#define uchr unsigned char
void UART1_Init(uint baudart)
{
uint baud;
baud=16000000/baudart;
UART1_BRR2 = (uchr)((baud & 0xf000)>>8) | (uchr)(baud & 0x000f);
UART1_BRR1 = (uchr)((baud & 0x0ff0)>>4);
UART1_CR1_bit.UART0 = 0; //使能UART中斷。
UART1_CR2_bit.RIEN = 1; //使能接收中斷使能
UART1_CR2_bit.REN = 1; //使能接收
UART1_CR2_bit.TEN = 1; //使能發(fā)送
}
void UART1_SendData(uchr data)
{
while(!(UART1_SR_bit.TXE));
UART1_DR = data;
}
int main( void )
{
asm("sim");
CLK_CKDIVR = 0X00;
UART1_Init(9600);
asm("rim");
while(1);
}
#pragma vector = 20
__interrupt void UART1_TX_ISP()
{
uchr ch;
UART1_SR_bit.RXNE = 0;
ch = UART1_DR;
UART1_SendData(ch);
}
復(fù)制代碼
作者:
滄浪
時(shí)間:
2017-8-23 15:56
已解決,主要是發(fā)送函數(shù) UART1_SendData()的問(wèn)題,里面 while(!(UART1_SR_bit.TXE));和UART1_DR = data;的順序有錯(cuò)誤,另經(jīng)過(guò)學(xué)習(xí)說(shuō)是這種方法寫串口發(fā)送不科學(xué),有會(huì)第一個(gè)數(shù)據(jù)發(fā)送失敗的問(wèn)題,標(biāo)志位不應(yīng)采用TXE,采用TC比較好。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1