novakon作者
13年7个月前IP:未同步
529806
5楼
透露一下STM8代码。使用IAR编译

//main.c

#include "libpin.c"
//everything in libpin.c

fifobuffer txbuf,rxbuf;
void send_out(uchar input);
void check_rx();

//life of printf
int putchar(int c)
{
  send_out(c);
  return (c);
}

pin out;

#define high(whatever) pinhigh(&whatever)
#define low(whatever) pinlow(&whatever)
#define flip(whatever) pinflip(&whatever)

void init()
{
  delay(60000);//stable
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  pininit(&out,'D',7,'p');
  
  fifobufferinit(&txbuf);
  fifobufferinit(&rxbuf);
  
  UART2_Init(9600,UART2_WORDLENGTH_8D,UART2_STOPBITS_1,UART2_PARITY_NO,
             UART2_SYNCMODE_CLOCK_DISABLE ,UART2_MODE_TXRX_ENABLE);
  
  UART2_ITConfig(UART2_IT_TXE, ENABLE);  
  UART2_ITConfig(UART2_IT_RXNE, ENABLE);
  UART2_Cmd(ENABLE);
}

void main()
{
  init();
  enableInterrupts();
  while(1){
    flip(out);
    check_rx();
  }
}

#pragma vector = 22
__interrupt void txe()
{
  if(fifobufferremain(&txbuf)!=0){
    UART2_SendData8(fifobufferout(&txbuf));
  }else{
    UART2_ITConfig(UART2_IT_TXE, DISABLE);
  }
}

#pragma vector = 23
__interrupt void rxne()
{
  fifobufferin(&rxbuf,UART2_ReceiveData8());
}
void check_rx(){
  if(fifobufferremain(&rxbuf)!=0){
    uchar a=fifobufferout(&rxbuf);
    printf("recv ascii %d\\x0d\\x0a",a);
  }
}
inline void send_out(uchar input)
{
  fifobufferin(&txbuf,input);
  UART2_ITConfig(UART2_IT_TXE, ENABLE);
}
评论
文号 / 529806

万流景仰
名片发私信
学术分 16
总主题 1270 帖总回复 8407 楼拥有证书:学者 机友 笔友
注册于 2008/03/29 15:34:00最后登录 2022/01/09 14:09:34
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

已走,勿送

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的