• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32 nucleo uartˊ

wakery 2016-11-24 浏览量:2818

剛開始使用STM32L153RE NUCLEO 的開發版,是用STM32CUBMX變IAR來寫程式,最近試到UART的部分,想請問怎麼寫輸入A回傳B,輸入C回傳D這種的 還有要做判別的時候程式一定是要寫入STM32xxx.it去做判別嗎?

我的程式有寫出下面這樣

宣告:

char *bufftr="HELLO\n\r";
uint8_t buffrec=0;

void  HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

int main:
HAL_UART_Receive_IT(&huart2, &buffrec, 1);

下面:

 void  HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
 {
HAL_UART_Receive_IT(&huart2,(uint8_t*)buffrec,1);

HAL_UART_Transmit_IT(&huart2, (uint8_t*)bufftr, 6);
 }
​這樣去跑得化不管我輸入什麼都會回傳bufftr,有試著在接收用IF:(if(HAL_UART_Receive_IT(&huart2,(uint8_t*)buffrec,1)==1)但沒有用​,

​還是要在void USART2_IRQHandler(void)​寫程式做判別呢

觀看結果是用hercules setup這個軟體

假如有誰知道請為我解答,謝謝!!!​


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • HAL_UART_Receive_IT参数中的Buffer要设置的大一些,比如char buffer[64];等,这个缓冲区的作用是接收数据使用,因为接收的时候不知道会有多少数据达到,所以要给够了。

    调用的方法len = HAL_UART_Receive_IT(huart, buffer, 64); 长度的参数要和缓冲区的大小一致。

    这个函数的返回结果是实际接收到的数据长度​,在回传的时候,应该是HAL_UART_Transmit_IT(huart, buffer, len);​ 这样就可以将收到的数据再发送出去,而长度是动态的,不需要在程序中指定。


    • 发布于 2016-11-24
    • 举报
    • 评论 1
    • 1
    • 0
安卓小王子 回复了 LiuYang:繁体字能看下去的,还能回答,你还是比较厉害 回复

其他答案 数量:2
  • 給您一個實現概念,多半情況下我們並不知道要傳多少字元,因此我們會用每收到1字元就觸發一次,但如果我們要去比對字元,那一定要有地方可以儲存,就是Buffer囉

    這裡我採用Circular queue,以下是該結構宣告

    #define QSIZE 100
    struct uart_buffer_t{
       char * front;
     char * rear;
       char buf[QSIZE];
    }uart_buffer;
    
    初始化
    uart_buffer.front=uart_buffer.buf;
    uart_buffer.rear=uart_buffer.buf;
    然後操作方式就是每當接收一個字元時
    *(rear)++;
    每讀取一個字元時
    *(front)++;
    最後是邊界條件
    if(uart_buffer.rear>=uart_buffer.buf+QSIZE)
       uart_buffer.rear=uart_buffer.buf;
    
    if(uart_buffer.front>=uart_buffer.buf+QSIZE)
       uart_buffer.front=uart_buffer.buf;
    判斷是否還有字元未讀取
    if(uart_buffer.front!=uart_buffer.rear)
    ...
    然後每當讀取一個字元,就做比對,比對成功就比對下一個字元,這裡不用strcmp函式,因為字串頭不是在index 0
    char c=uart_buffer.buf[front++];
    if(c=='A')
     ....
    以上希望有幫助到您

    • 发布于2016-11-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个需要你后期做类似于协议解析的。。对于你这种单字节的接收方式,一般讲数据存到开辟的缓存数组里,然后再按协议格式解析即可。。
    • 发布于2016-11-26
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32 nucleo uartˊ