STM32與匿名上位機通訊 使用串列埠DMA實現

2022-05-18 04:59:59 字數 1613 閱讀 1933

背景:匿名上位機功能強大,這裡想要採用匿名上位機輸出一些除錯資訊,以波形的形式顯示,方便觀察和除錯。

平台:硬體:stm32f405rgt6

通訊:2.4g zigbee無線串列埠收發模組 cc2530

軟體:匿名上位機v6

數傳模組操作簡介:

配置 **:(注意以下**中不包含中斷優先順序的配置,個人習慣將所有nvic的配置寫在乙個單獨的函式中)

這裡採用uart2 dma傳送的方式 將資料通過數傳傳送給匿名上位機。採用dma傳輸完成中斷,可以實現不定長資料的傳輸。

/* usart2 for debug (ano) */

void vuart2config(void)

}/* uart2 dma send finish interrupt : send debug date (ano) */

void dma1_stream6_irqhandler(void)

}

dma傳送函式:(初始化時不使能dma,當資料準備好之後,根據待傳送的資料長度,設定dma傳送的長度,同時使能dma,啟動一次傳送,當每次dma傳送完成後,在傳輸完成中斷中,關閉dma,等待下一次資料準備好,迴圈以上過程)

/* start once usart2 dma send (for ano) */

static void usart2_ano_dma_send(uint16_t sendsize)

匿名上位機資料打包及迴圈傳送:(使用的是匿名v6版本的上位機,具體協議請參考對應版本的上位機協議,這裡使用匿名上位機提供的使用者資料格式傳送資料,id分別為f1,f2,f3的三組不定長資料)

/* accroding to ano earth station v6 protocol: userdata */

void anosend(void)

sendtoano_buff[senddata_cnt++] = sumcheck;

usart2_ano_dma_send(senddata_cnt);

break;

} /* id2 (f2) send pc data */

case 2:

sendtoano_buff[senddata_cnt++] = sumcheck;

usart2_ano_dma_send(senddata_cnt);

break;

} /* id2 (f3) send test data */

case 3:

sendtoano_buff[senddata_cnt++] = sumcheck;

usart2_ano_dma_send(senddata_cnt);

break;

} }ano_dataid++;

/* choose the return number */

if(ano_test)

} else if(!ano_test) }

}

——cloud over sky

——2020/3/7

stm32與上位機進行串列埠通訊問題

stm32傳送資料給上位機 stm32串列埠傳送資料函式usart senddata 一次只能傳送乙個位元組 8位 不能超過0xff 255 因此大於255的資料需要拆成幾個位元組傳送。函式實現 void send data usart typedef usartx,char s 再在上位機中進行資...

FPGA與STM32 模擬32位SPI通訊(二)

1 下午又繼續實驗,發現fpga不輸出資料了,但是sck訊號還有,情況比上午還糟,用signaltap 了一陣也沒有結果,後來發現是杜邦線松了。教訓是以後接線時鬆的線務必不要將就,尤其是在接比較密集的杜邦線,線鬆動了會很難排查,熟悉了signaltap的 但仿不出全部的32個sck訊號,取樣率設到6...

SIM908和STM32資料上傳到上位機

最近做gprs,開始什麼都不懂,摸索了近乙個月吧,現在網路基本搭建好了。把經驗給大家分享下,歡迎多提意見。有必要說下,我不是專業搞網路的,只是需要這些臨時學習的,有很多用語只是為了方便理解。不恰當之處請見諒。我的目標是,用stm32 採集資料,gprs將資料上傳至上位機。一 選型。個人覺得都差不多,...