女人被爽到高潮视频免cn费95,久久99精品久久久久久久不卡,内射人妻骚骚骚,久久精品一区二区三区四区啪啪 ,美女视频黄频a美女大全

  • 方案介紹
    • 19.4-STM32接收數(shù)據(jù)-狀態(tài)顯示在屏幕
  • 附件下載
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

19.4-STM32接收數(shù)據(jù)-狀態(tài)顯示在屏幕 openMV尋跡與小車(chē)控制 STM32F103C8T6

2024/06/25
2513
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

聯(lián)系方式.txt

共1個(gè)文件

19.4-STM32接收數(shù)據(jù)-狀態(tài)顯示在屏幕 openMV尋跡與小車(chē)控制 Openmv+STM32F103C8T6視覺(jué)巡線(xiàn)小車(chē)
這個(gè)是全網(wǎng)最詳細(xì)的STM32項(xiàng)目教學(xué)視頻。
第一篇在這里:
視頻在這里


STM32智能小車(chē)V3-STM32入門(mén)教程-openmv與STM32循跡小車(chē)-stm32f103c8t6-電賽 嵌入式學(xué)習(xí) PID控制算法 編碼器電機(jī) 跟隨

19.4-STM32接收數(shù)據(jù)-狀態(tài)顯示在屏幕

先通過(guò)串口上位機(jī)模擬發(fā)送、

STM32有視覺(jué)循跡模式、該模式下接收到數(shù)據(jù)根據(jù)狀態(tài)顯示在屏幕上,現(xiàn)在此狀態(tài)并不控制電機(jī)。
在這里插入圖片描述
復(fù)制一下18在上面基礎(chǔ)改,命名成19-4_LED

可以先復(fù)制到桌面英文路徑,防止出現(xiàn)中文路徑兼容問(wèn)題。
在這里插入圖片描述
在這里插入圖片描述
原理圖攝像頭是預(yù)留什么引腳
在這里插入圖片描述
PCB中可以看到接口位置
在這里插入圖片描述
所以我們要初始化一下串口二,然后開(kāi)啟串口接收中斷
在這里插入圖片描述
串口2 開(kāi)啟初始化

在這里插入圖片描述
開(kāi)啟串口中斷
在這里插入圖片描述
生成代碼
在這里插入圖片描述
打開(kāi)代碼

在這里插入圖片描述
如果發(fā)現(xiàn)18章代碼經(jīng)常出現(xiàn)黑屏,那可能就是6050的初始化卡住了,我們可以注釋掉一下MPU6050部分的代碼。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
我們先定義一個(gè)串口二接收數(shù)據(jù)變量

uint8_t g_ucUsart2ReceiveData;  //保存串口二接收的數(shù)據(jù)

在這里插入圖片描述
開(kāi)啟接收中斷

  HAL_UART_Receive_IT(&huart2,&g_ucUsart2ReceiveData,1);  //串口二接收數(shù)據(jù)

在這里插入圖片描述
聲明一下變量

extern uint8_t g_ucUsart2ReceiveData;  //保存串口二接收的數(shù)據(jù)

在這里插入圖片描述
我們需要在串口中斷回調(diào)函數(shù)中加入我們對(duì)接收到數(shù)據(jù)的解析

	if(huart == &huart2)//判斷中斷源 是否來(lái)自串口二
	{
		//這里增加解析函數(shù)	
		HAL_UART_Receive_IT(&huart2,&g_ucUsart2ReceiveData,1);  //啟動(dòng)串口二接收數(shù)據(jù)
	}

在這里插入圖片描述
usart.c文件中定義一個(gè)函數(shù)
在這里插入圖片描述
在這里插入圖片描述

/*******************
*  @brief  攝像頭串口協(xié)議解析函數(shù) 可以連接K210或openmv等
*  @param  data:串口接收到的每個(gè)字節(jié)
*  @return  
*
*******************/
void usartCamera_Receive_Data(uint8_t data)
{
	static uint8_t state = 0;//定義靜態(tài)static 變量
	
	if(state==0&&data==0xA5) //判斷第一個(gè)是不是幀頭0xA5
	{
		state=1;//是幀頭0xA5 賦值state=1 表示接收下一個(gè)數(shù)據(jù)
		//數(shù)據(jù)存儲(chǔ)在數(shù)組中 "g_ucUsart2ReceivCounter++",這里是先用后加,比如g_ucUsart2ReceivCounter 初值為0,執(zhí)行這個(gè)是先g_ucaUsart2ReceiveBuffer[0]=data,然后g_ucUsart2ReceivCounter++,即后g_ucUsart2ReceivCounter = 1的
		g_ucaUsart2ReceiveBuffer[g_ucUsart2ReceivCounter++] = data;
	}
	else if(state==1&&data==0xA6) //第二個(gè)是不是幀頭0xA6
	{
		state=2;//如果第二個(gè)是幀頭0xA6 賦值state=2 表示接收下一個(gè)數(shù)據(jù)
		g_ucaUsart2ReceiveBuffer[g_ucUsart2ReceivCounter++] = data;//保存數(shù)據(jù)
	}
	else if(state==2)//然后確定開(kāi)頭是0XA5 0XA6 就開(kāi)始接收
	{
		g_ucaUsart2ReceiveBuffer[g_ucUsart2ReceivCounter++]=data;
		if(g_ucUsart2ReceivCounter>9||data==0x5B) state=3;  //接收大于9個(gè)或者接收到幀尾0X5B 就置位狀態(tài)三
	}
	else if(state==3) //狀態(tài)三
	{
		if(g_ucaUsart2ReceiveBuffer[g_ucUsart2ReceivCounter-1] == 0x5B)  //確定 最后一個(gè)是不是0x5B幀尾 是幀尾0x5B 就認(rèn)為通信正確 處理數(shù)據(jù)
		{
			state = 0;					//這里就可以處理數(shù)據(jù)了、處理完記得清空數(shù)組和重置標(biāo)志位與計(jì)數(shù)值
			g_ucUsart2ReceivCounter = 0;//清零計(jì)數(shù)值
			//比如根據(jù)數(shù)據(jù)設(shè)置紅外旋轉(zhuǎn)偏移狀態(tài)

			//1.設(shè)置快速 慢速右邊 左邊 數(shù)字存儲(chǔ)的變量意義: [0]和[1]:幀頭、[2]:攝像頭左邊數(shù)第一個(gè)感興趣區(qū)域、[3]:左邊第二個(gè)、[4]:左邊第三個(gè)、[5]:左邊第四個(gè)、[6]:左邊第五個(gè)、[7]:幀尾
				 if(g_ucaUsart2ReceiveBuffer[6]==0&&g_ucaUsart2ReceiveBuffer[5]==0&&g_ucaUsart2ReceiveBuffer[3]==0&&g_ucaUsart2ReceiveBuffer[2]==0)
				 {
					g_cThisState=0;//前進(jìn)
					g_lHW_State=22222;//設(shè)置這個(gè)顯示在OLED上方便調(diào)試 五個(gè)值 以此從左向右表示 從左向右的五個(gè)區(qū)域
				 }
				 if(g_ucaUsart2ReceiveBuffer[6]==0&&g_ucaUsart2ReceiveBuffer[5]==1&&g_ucaUsart2ReceiveBuffer[3]==0&&g_ucaUsart2ReceiveBuffer[2]==0)
				 {
					g_cThisState=-1;//應(yīng)該右轉(zhuǎn)
					g_lHW_State=22212;	//表示右數(shù)第二個(gè) 識(shí)別到線(xiàn)
				 }
				 if(g_ucaUsart2ReceiveBuffer[6]==1&&g_ucaUsart2ReceiveBuffer[5]==0&&g_ucaUsart2ReceiveBuffer[3]==0&&g_ucaUsart2ReceiveBuffer[2]==0)
				 {g_cThisState=-2;//快速右轉(zhuǎn)
				 g_lHW_State=22221;
				 }
				 if(g_ucaUsart2ReceiveBuffer[6]==1&&g_ucaUsart2ReceiveBuffer[5]==1&&g_ucaUsart2ReceiveBuffer[3]==0&&g_ucaUsart2ReceiveBuffer[2]==0)
				 {g_cThisState=-3;//快速右轉(zhuǎn)
				 g_lHW_State=22211;
				 }
				 if(g_ucaUsart2ReceiveBuffer[6]==0&&g_ucaUsart2ReceiveBuffer[5]==0&&g_ucaUsart2ReceiveBuffer[3]==1&&g_ucaUsart2ReceiveBuffer[2]==0)
				 {g_cThisState=1;//應(yīng)該左轉(zhuǎn)
				 g_lHW_State=21222;
				 }
                 if(g_ucaUsart2ReceiveBuffer[6]==0&&g_ucaUsart2ReceiveBuffer[5]==0&&g_ucaUsart2ReceiveBuffer[3]==0&&g_ucaUsart2ReceiveBuffer[2]==1)
				 {g_cThisState=2;//快速左轉(zhuǎn)
				 g_lHW_State=12222;
				 }
                 if(g_ucaUsart2ReceiveBuffer[6]==0&&g_ucaUsart2ReceiveBuffer[5]==0&&g_ucaUsart2ReceiveBuffer[3]==1&&g_ucaUsart2ReceiveBuffer[2]==1)
				 {g_cThisState=3;//快速左轉(zhuǎn)
				 g_lHW_State=11222;
				 }

				//2.然后清空數(shù)組
				for(int i=0;i<10;i++) g_ucaUsart2ReceiveBuffer[i]=0x00;//清空數(shù)組
				
		}
		else //不是幀尾說(shuō)明通信錯(cuò)誤重新開(kāi)始接收
		{
			state=0;
			g_ucUsart2ReceivCounter =0;
			for(int i=0;i<10;i++) g_ucaUsart2ReceiveBuffer[i]=0x00;//清空數(shù)組
		}
	}
	else
	{	//其他異常清空
		state=0;
		g_ucUsart2ReceivCounter =0;
		for(int i=0;i<10;i++) g_ucaUsart2ReceiveBuffer[i]=0x00;//清空數(shù)組
	}
}

然后聲明一下變量

extern int8_t g_cThisState ;//這次狀態(tài)

在這里插入圖片描述
定義一個(gè)變量 并且在main文件中聲明一下

int g_lHW_State = 0;//幫助視覺(jué)調(diào)試 用于表示紅外對(duì)管或者視覺(jué)攝像頭識(shí)別狀態(tài)

在這里插入圖片描述
聲明一下

extern int g_lHW_State;//幫助視覺(jué)調(diào)試 用于表示紅外對(duì)管或者視覺(jué)攝像頭識(shí)別狀態(tài)

在這里插入圖片描述
我們需要再定義模式,這個(gè)模式是視覺(jué)循跡模式

視覺(jué)模式下 我們顯示一下,我們之前賦值的變量 以測(cè)試我們接收的數(shù)據(jù)是否正確。

			//這里編寫(xiě)觸發(fā)中斷后要執(zhí)行的程序
			if(g_ucMode == 6) g_ucMode = 1;//g_ucMode模式是0 1 2 3 4 5  6
			else
			{
				g_ucMode+=1;
			}

在這里插入圖片描述
增加模式6,的功能,我們先只顯示視覺(jué)識(shí)別結(jié)果

	if(g_ucMode == 6)
	{
		sprintf((char*)OledString, "lHW:%d  ", g_lHW_State);//視覺(jué)識(shí)別結(jié)果
		OLED_ShowString(0,0,OledString,12);//這個(gè)是oled驅(qū)動(dòng)里面的,是顯示位置的一個(gè)函數(shù),
		motorPidSetSpeed(0,0);//停住電機(jī)防止亂跑 方便調(diào)試
	}
	

在這里插入圖片描述
別忘記我們的解析函數(shù),加到串口中斷處理函數(shù)中

		usartCamera_Receive_Data(g_ucUsart2ReceiveData);

在這里插入圖片描述
修改上面程序經(jīng)過(guò)測(cè)試,單片機(jī)

編譯上面程序,并燒錄到我們的單片機(jī)、單片機(jī)連接到電腦、然后電腦模擬openmv發(fā)送正確格式的數(shù)據(jù),手動(dòng)點(diǎn)擊SSCOM發(fā)送數(shù)據(jù)、單片機(jī)可以接收到數(shù)據(jù)并顯示在OLED上(觀(guān)察的是OLED的第一行數(shù)值變化)、當(dāng)我們?cè)O(shè)置每1ms發(fā)送一次數(shù)據(jù)時(shí)候,單片機(jī)的OLED有時(shí)候會(huì)出現(xiàn)卡死的情況。所以是單片機(jī)串口接收大量數(shù)據(jù)卡死的情況,經(jīng)過(guò)網(wǎng)上搜索發(fā)現(xiàn)解決問(wèn)題的辦法。

**這個(gè)博客是搜索到可以解決問(wèn)題的鏈接:**https://blog.csdn.net/qq_44629109/article/details/131002223

參考博客如下部分:
在這里插入圖片描述
所以我們要更改如下代碼:

  __HAL_UART_ENABLE_IT(&huart2, UART_IT_ERR);// 啟用UART2的錯(cuò)誤中斷功能

在這里插入圖片描述
在USART.C 中添加如下代碼

/* UART 錯(cuò)誤回調(diào)函數(shù) 處理串口錯(cuò)誤 */
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
    if(__HAL_UART_GET_FLAG(huart,UART_FLAG_ORE) != RESET) //使用__HAL_UART_GET_FLAG宏檢查UART的overrun錯(cuò)誤標(biāo)志位是否被置位。如果返回值不等于RESET,表示overrun錯(cuò)誤標(biāo)志位被置位,即發(fā)生了overrun錯(cuò)誤
    {
        __HAL_UART_CLEAR_OREFLAG(huart);//使用__HAL_UART_CLEAR_OREFLAG宏清除UART的overrun錯(cuò)誤標(biāo)志位
        HAL_UART_Receive_IT(&huart2,&g_ucUsart2ReceiveData,1);  //使用HAL庫(kù)函數(shù)啟動(dòng)UART2接收中斷,并設(shè)置接收緩沖區(qū)的大小為1字節(jié)
    }
}

在這里插入圖片描述
添加串口2接收變量的聲明

extern uint8_t g_ucUsart2ReceiveData;  //保存串口二接收的數(shù)據(jù)

在這里插入圖片描述
讓單片機(jī)處于模式6(按六下 KEY1)
在這里插入圖片描述
上面我們測(cè)試通過(guò)上位機(jī)發(fā)送數(shù)據(jù),然后觀(guān)察屏幕。

然后我們把STM32底板接到openmv,openmv連接電腦,openmv使用的程序是19章3節(jié)的程序19-3-openmv
在這里插入圖片描述
然后上面如果沒(méi)有問(wèn)題,就可以把openmv 程序通過(guò)"將打開(kāi)的腳本保存到openmv Cam(作為main.py)"

接法如下:
在這里插入圖片描述
這里就說(shuō)明了如何接受的數(shù)據(jù),后面的19.5講解利用數(shù)據(jù)

聯(lián)系:Q,1930299709

  • 聯(lián)系方式.txt
    下載

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠(chǎng)商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
XRCFD25M000F2N51R0 1 Murata Manufacturing Co Ltd Parallel - Fundamental Quartz Crystal,
$0.83 查看
SN74LVC2T45DCURG4 1 Texas Instruments 2-Bit Dual Supply Transceiver with Configurable Voltage-Level Shifting and 3-State Outputs 8-VSSOP -40 to 85

ECAD模型

下載ECAD模型
$0.53 查看
TLP185(V4B-TL,SE(T 1 Toshiba America Electronic Components Transistor Output Optocoupler
$0.43 查看
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱(chēng)改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷(xiāo)售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷(xiāo)售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(chē)(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠(chǎng)商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專(zhuān)用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車(chē)用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱(chēng)改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷(xiāo)售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷(xiāo)售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(chē)(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠(chǎng)商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專(zhuān)用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車(chē)用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦

方案定制

去合作
方案開(kāi)發(fā)定制化,2000+方案商即時(shí)響應(yīng)!