IAR+STM8——UART串口發(fā)送與中斷接收
STM8的UART功能強(qiáng)大,除了常規(guī)的串口異步通訊外,還擁有LIN主模式、紅外編解碼器、智能卡模擬等功能。新手還是從基本的串口通訊入手,那些高級功能等熟練以后再慢慢研究吧。
#i nclude
void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M內(nèi)部RC經(jīng)2分頻后系統(tǒng)時鐘為8M
}
void UART3_init(void)
{
UART3_BRR2 = 0x01; // 設(shè)置波特率9600
UART3_BRR1 = 0x34; // 8M/9600 = 0x341
UART3_CR2 = 0x2C; // 允許接收中斷,允許接收,允許發(fā)送
}
#pragma vector=UART3_R_RXNE_vector
__interrupt void UART3_RX_RXNE(void)
{
unsigned char c;
c = UART3_DR; // 接收到數(shù)據(jù)了
while(!UART3_SR_TXE);
c++; // 把接收到的數(shù)據(jù)加1
UART3_DR = c; // 再發(fā)回去,為什么這么做?在電腦上串口調(diào)試軟件里發(fā)1就收到2,發(fā)A就收到B,看運(yùn)行結(jié)果比較方便
}
void init_devices(void)
{
asm("sim"); // 關(guān)全局中斷
CLK_init();
UART3_init(); // 開發(fā)板上的串口接的是UART3,剛開始想當(dāng)然的認(rèn)為UART1,浪費(fèi)我半個小時
asm("rim"); // 開全局中斷
}
void main( void )
{
init_devices();
// 主循環(huán)里沒有程序需要執(zhí)行
while(1);
}