2019年4月14日 星期日

Rx62t 實作:藍芽(HC-05)訊號 控制LED(uart)

目錄:

1.PDG2設定

2.接線

3.程式


1.PDG2設定

使用SCI0,62T只做 Reception(RX),8bit,無同位元,1 stop bit,Baud rate :96




















開啟RX中斷












將P30設為OUTPUT ,使板子上的LED亮。

2.接線

HC-05的TX---->PB1



3.程式

概述:藍芽控制LED 亮,滅
char rx;  //RX 
void main(void)
{
//clock set
R_PG_Clock_Set();
//LED
R_PG_IO_PORT_Set_P3();   
 
//UART
R_PG_SCI_Set_C0();
 
R_PG_IO_PORT_Write_P30(1);    //一開始不亮 

//開始接收 
R_PG_SCI_StartReceiving_C0(&rx,1);
while(1){
 
if(rx=='O') //當RX接收到 O 時 點亮 
  R_PG_IO_PORT_Write_P30(0);

if(rx=='F') //當RX接收到 F 時 熄滅 
R_PG_IO_PORT_Write_P30(1);
}
}
//RX 中斷 
Sci0ReFunc() //接收到的字元放入rx 
{R_PG_SCI_StartReceiving_C0(&rx,1);}






7 則留言:

  1. 我想請問開啟RX是否不用其他的設定,
    我按照你的下去開,很遺憾地開不起來
    我開的是SCI1的,他沒有進到Sci0ReFunc()裡的中斷
    試過直接用timer讓他強制進入也無法讓他接收,請問是甚麼問題呢

    回覆刪除
    回覆
    1. #define LED_D1 PORT1.DR.BIT.B1
      #define LED_D2 PORT8.DR.BIT.B0
      #define LED_D3 PORT8.DR.BIT.B1
      char rx;
      void main(void)
      {
      //clock set
      R_PG_Clock_Set();
      //IO
      //***********************************************
      R_PG_IO_PORT_Set_P1( );
      R_PG_IO_PORT_Set_P7( );
      R_PG_IO_PORT_Set_P8( );
      R_PG_IO_PORT_Set_P9( );
      R_PG_IO_PORT_Set_PA( );
      //Timer1
      R_PG_Timer_Start_CMT_U0_C1();
      //UART
      R_PG_SCI_Set_C1( );
      R_PG_SCI_StartReceiving_C1(&rx,1);
      LED_D1=1;
      LED_D2=1;
      LED_D3=1;
      while(1){
      switch(rx)
      {
      case 0x30:
      LED_D1=~LED_D1;
      break;
      case 0x31:
      LED_D2=~LED_D2;
      break;
      case 0x32:
      LED_D3=~LED_D3;
      break;
      }
      }
      }
      //RX 中斷
      void Sci1ReFunc(void){R_PG_SCI_StartReceiving_C0(&rx,1);}

      刪除
    2. 想請問您信號發送的也是用手機APP嗎?
      我當初並沒有開啟Timer,
      有沒有可能是您發送的訊號不正確,
      我可能需要您發送訊號的方式,才可以幫您做出更多判斷

      刪除
    3. 你好~
      我是利用藍芽傳送,透過AccessPort連上藍芽並丟資料
      我也嘗試過指沒開Timer讓他抓取
      發送訊號的方式應該是正確的
      我有去做驗證!
      但它可能是沒抓到rx的資料

      刪除
    4. 您好
      我想我找到您的BUG了
      你所使用的SCI
      是R_PG_Timer_Start_CMT_U0_C1();
      您是用C1
      但是您的RX中斷
      //RX 中斷
      void Sci1ReFunc(void){R_PG_SCI_StartReceiving_C0(&rx,1);}
      是用C0
      不知道是否為這個錯誤
      可以試試看將C0改為C1試試看嗎?
      如果還有問題那我再想想

      刪除
  2. 你好!
    我試過但沒有成功
    它確實有在進RX中斷
    void Sci1ReFunc(void){R_PG_SCI_StartReceiving_C0(&rx,1);} C0->C1
    這段確實有打錯已修正但結果一樣!

    回覆刪除
    回覆
    1. 您好
      所以確認有進入中斷那請問能用Add Watch的方式看到rx數值是否有變化嗎?

      刪除