串口接收數(shù)據(jù)的時(shí)候,總是很難進(jìn)入到中斷處理函數(shù),發(fā)好幾次數(shù)據(jù)可能只有一次能觸發(fā)中斷響應(yīng)的,有辦法提高響應(yīng)速度嗎?
您好,您是如何判斷只有少數(shù)情況會觸發(fā)中斷的。默認(rèn)例程里可能會在兩處代碼觸發(fā)接收中斷,一處是數(shù)據(jù)量達(dá)到觸發(fā)點(diǎn),另一處是接收超時(shí)。接收超時(shí)要求FIFO中至少留有一個(gè)字節(jié)以供硬件判斷超時(shí)。
如果需要每次接收中斷都要進(jìn)超時(shí),可以參考下列博客,在數(shù)據(jù)量達(dá)到觸發(fā)點(diǎn)時(shí)只接收n-1個(gè)數(shù)據(jù)。
因?yàn)橐贿M(jìn)入中斷函數(shù)就會打印,但是發(fā)送了很多次數(shù)據(jù)都沒有反應(yīng),手機(jī)也沒有收到信息。程序都是進(jìn)入超時(shí)中斷,沒有進(jìn)入觸發(fā)點(diǎn)中斷。
接收超時(shí)的條件是什么,要設(shè)置超時(shí)的時(shí)間嗎?
我用的是藍(lán)牙串口透傳例程,觸發(fā)點(diǎn)是在這里設(shè)置嗎?
app_drv_fifo_result_t
app_drv_fifo_init(app_drv_fifo_t *fifo, uint8_t *buffer, uint16_t buffer_size)
{
? ? if(buffer_size == 0)
? ? {
? ? ? ? return APP_DRV_FIFO_RESULT_LENGTH_ERROR;
? ? }
? ? if(0 != ((buffer_size) & (buffer_size - 1)))
? ? {
? ? ? ? return APP_DRV_FIFO_RESULT_LENGTH_ERROR;
? ? }
? ? fifo->begin = 0;
? ? fifo->end = 0;
? ? fifo->data = buffer;
? ? fifo->size = buffer_size;
? ? fifo->size_mask = buffer_size - 1;
? ? return APP_DRV_FIFO_RESULT_SUCCESS;
}
BLE_UART的例程下面有一個(gè)Readme,參考一下,使用串口3進(jìn)行數(shù)據(jù)收發(fā),同時(shí)接串口1打印觀察。
連接BLE調(diào)試助手進(jìn)行藍(lán)牙的數(shù)據(jù)透傳,無問題。
重新解壓了一個(gè)程序也不行,發(fā)20次只能收到3次
1、確認(rèn)是使用的官方EVT,官方開發(fā)板進(jìn)行測試;
2、使用官方的例程不做修改進(jìn)行測試,官方可以提供出來的程序,是不會出現(xiàn)問題的,這也是經(jīng)過我們測試的;
3、發(fā)送數(shù)據(jù)的時(shí)候先發(fā)送一個(gè)字節(jié),注意程序中是有一份Readme,請仔細(xì)參數(shù),相應(yīng)的使用方法是提供出來的。