感謝論壇和得捷組織的本次活動(dòng),讓我們有機(jī)會(huì)可以接觸優(yōu)秀的硬件產(chǎn)品。
簡(jiǎn)單的介紹一下本次的創(chuàng)意,想要實(shí)現(xiàn)一個(gè)簡(jiǎn)易的實(shí)時(shí)流量測(cè)量工具,這里我們選用了一款基于超聲波的傳感器,稍后在進(jìn)行簡(jiǎn)單的介紹,主控的選擇確實(shí)一個(gè)難題,最基礎(chǔ)的功能就是需要進(jìn)行顯示,當(dāng)然了STM32是最理想的選擇,相對(duì)開(kāi)發(fā)比較熟悉,最后通過(guò)不斷的篩選,STM32U083C-DK進(jìn)入了而我的視線(xiàn)。
意法半導(dǎo)體STM32U083C-DK開(kāi)發(fā)套件使用STM32U083MCT6微控制器演示和開(kāi)發(fā)應(yīng)用程序。意法半導(dǎo)體STM32U083C-DK是用于最終產(chǎn)品集成的用戶(hù)應(yīng)用開(kāi)發(fā)的參考設(shè)計(jì)。該板允許通過(guò)配備各種硬件功能來(lái)評(píng)估外設(shè)和創(chuàng)建應(yīng)用程序。這些功能包括USB FS設(shè)備、分段LCD、觸摸鍵、溫度傳感器等。與Arduino Uno V3, microbus 和擴(kuò)展連接器的兼容性簡(jiǎn)化了連接到專(zhuān)用應(yīng)用的擴(kuò)展屏蔽或子板的連接。該套件具有集成的STLINK-V2EC調(diào)試器/編程器,消除了對(duì)單獨(dú)探頭的需要。通過(guò)標(biāo)準(zhǔn)的USB Type-A或USB Type-C 到USB Type-C電纜連接到PC,可以輕松操作該板。這里的分段式的LCD正式我們所需要的。
我們簡(jiǎn)單看了一下其原理圖的分布:
最高可以顯示6位數(shù),完全可以滿(mǎn)足我們的需求,當(dāng)然了使用官方開(kāi)發(fā)板還有一個(gè)好處就是有相關(guān)模塊驅(qū)動(dòng)的歷程,我們直接使用其LCD_SegmentsDrive的歷程就可以實(shí)現(xiàn)基本的顯示功能,需要修改一些內(nèi)容讓其符合我們的數(shù)字顯示需求,我們從寫(xiě)一個(gè)顯示程序:
void BSP_LCD_GLASS_data(uint32_t Speed)
{
uint32_t repetition = 0;
uint8_t nbrchar = 0;
uint8_t str[6] = "";
uint8_t st1 = 0;
/* Reset interrupt variable in case key was press before entering function */
bLCDGlass_KeyPressed = 0;
repetition = Speed;
for(uint8_t i=0;i<6;i++)
{
if(repetition == 0)
{
if(i==0)
str[i] = 48;
else
str[i] = 32;
}
else
{
nbrchar = repetition%10;
str[i] = nbrchar+48;
repetition = repetition/10;
}
}
for(uint8_t j=0;j<3;j++)
{
st1 = str[j];
str[j] = str[5-j];
str[5-j] = st1;
}
BSP_LCD_GLASS_Clear();
BSP_LCD_GLASS_DisplayString(str);
}
接下來(lái)就是獲取流量相關(guān)的數(shù)據(jù),我們使用的是一款超聲波流量傳感器,主要是使用串口通信,這樣一看是不是就不復(fù)雜了,硬件方面我們主要連接對(duì)應(yīng)的串口就可以,我們選擇的串口二,對(duì)應(yīng)的硬件座如下:
接下來(lái)是外設(shè)初始的配置,我們需要打開(kāi)串口2:
由于收到的數(shù)據(jù)是一些列的字符串,為了減少中斷的占用,我們啟用的DMA:
采用串口空閑中斷+DMA的方式進(jìn)行數(shù)據(jù)接收,這種方式非常適合不定長(zhǎng)的串口數(shù)據(jù)接收。
接下來(lái)我們只要在外部中斷處理就可以了:
void USART2_LPUART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_LPUART2_IRQn 0 */
tmp_flag =__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE); //獲取IDLE標(biāo)志位
if((tmp_flag != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart2);//
HAL_UART_DMAStop(&huart2);
Speed_Data = rx_buffer[5]*256+rx_buffer[5];
HAL_UARTEx_ReceiveToIdle_DMA(&huart2,rx_buffer,200);//再次開(kāi)啟DMA接收
}
/* USER CODE END USART2_LPUART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_LPUART2_IRQn 1 */
/* USER CODE END USART2_LPUART2_IRQn 1 */
}
測(cè)試效果如下:
斷碼顯示還是存在一定弊端的,對(duì)觀(guān)察角度的要求太苛刻。