例程資料鏈接如下(群文件也可下載):
BD網(wǎng)盤(pán)鏈接:
https://pan.baidu.com/s/187ePq84u2QjE1bsVPM6i3g?pwd=9jvv
提取碼:9jvv
一、實(shí)驗(yàn)簡(jiǎn)介
本實(shí)驗(yàn)是使用CW32單片機(jī)制作一個(gè)入門(mén)的遙控循跡小車(chē)。遙控采用藍(lán)牙配合手機(jī)APP進(jìn)行遙控。循跡使用一個(gè)5路的循跡模塊。使用OLED模塊進(jìn)行顯示當(dāng)前小車(chē)狀態(tài)。
二、實(shí)驗(yàn)器材
本實(shí)驗(yàn)使用到了CW32F030C8小藍(lán)板、智能小車(chē)底板、電機(jī)驅(qū)動(dòng)模塊、OLED模塊、DX-BT04-E藍(lán)牙模塊、Wch-Link下載調(diào)試器、Keil5開(kāi)發(fā)環(huán)境。
二、接線圖
實(shí)驗(yàn)完整接線圖:
四、用到的外設(shè)
1.串口2:
串口2用于藍(lán)牙模塊,使手機(jī)和單片機(jī)通過(guò)藍(lán)牙模塊進(jìn)行串口透?jìng)?,?而進(jìn)行點(diǎn)對(duì)點(diǎn)通信。
2.高級(jí)定時(shí)器ATIM:
初始化高級(jí)定時(shí)器CH1B和CH2B進(jìn)行PWM波輸出,從而達(dá)到電機(jī)調(diào)速目的。
3.基本定時(shí)器BTIM1:
初始化基本定時(shí)器1,在基本定時(shí)器中斷服務(wù)函數(shù)中對(duì)循跡模塊進(jìn)行掃描。將掃描的結(jié)果保存,以便在循跡模式中使用。
4.IIC1:
IIC1用于外掛OLED顯示模塊。
五、核心代碼
// 基本定時(shí)器中斷回調(diào)函數(shù)
// 在回調(diào)函數(shù)中對(duì)循跡模塊進(jìn)行掃描,將循跡模塊的狀態(tài)保存進(jìn)sensor_data中
void BTIM1_IRQHandler(void)
{
if (BTIM_GetITStatus(CW_BTIM1, BTIM_IT_OV)) // 判斷是否是通道1中斷
{
BTIM_ClearITPendingBit(CW_BTIM1, BTIM_IT_OV); // 清除中斷標(biāo)志位
char t = 0x00; // 設(shè)置零時(shí)變量保存灰度傳感器的值
// 保存灰度傳感器的值
// 采用或運(yùn)算,檢測(cè)到黑線將相應(yīng)的位設(shè)置為1
if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_1))
{
t |= 0x08; // 00001000 左邊數(shù)第一個(gè)
}
if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_2))
{
t |= 0x04; // 00000100 左邊數(shù)第二個(gè)
}
if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_3))
{
t |= 0x02; // 00000010 左邊數(shù)以三個(gè)
}
if (!GPIO_ReadPin(TRACKING_GPIOA, TRACKING_4))
{
t |= 0x01; // 00000001 左邊數(shù)第4個(gè)
}
if (!GPIO_ReadPin(TRACKING_GPIOC, TRACKING_5))
{
t |= 0x10; // 00010000 左邊數(shù)第5個(gè)
}
sensor_data = t; // 將灰度傳感器的值賦值給sensor_data
}
}
// 串口1中斷處理函數(shù)
void UART1_IRQHandler(void)
{
unsigned char TxRxBuffer;
if (USART_GetITStatus(CW_UART1, USART_IT_RC) != RESET)
{
USART_ClearITPendingBit(CW_UART1, USART_IT_RC); // 清除中斷標(biāo)志位
TxRxBuffer = USART_ReceiveData_8bit(CW_UART1); // 將接收到的數(shù)據(jù)放入TxRxBuffer
USART_RX_BUF[rxIndex] = TxRxBuffer; // 將接收到的數(shù)據(jù)放入緩沖區(qū)
if (rxIndex < USART_REC_LEN - 1) // 做數(shù)據(jù)長(zhǎng)度的限制,留一個(gè)字節(jié)用于結(jié)束字符或者溢出檢測(cè)
{
// 接收到的字符包含 n 或者 r 結(jié)束接收
if (USART_RX_BUF[rxIndex - 1] == 'n' || USART_RX_BUF[rxIndex - 1] == 'r')
{
USART_RX_BUF[rxIndex] = '?'; // 在最后一個(gè)字節(jié)加上空字符,表示字符串結(jié)束
}
else
{
rxIndex++;
}
}
rxIndex = 0; // 清除數(shù)據(jù)標(biāo)志
flag = 1; // 清除
}
審核編輯 黃宇
-
遙控
+關(guān)注
關(guān)注
11文章
290瀏覽量
58478 -
循跡小車(chē)
+關(guān)注
關(guān)注
42文章
65瀏覽量
69295 -
CW32
+關(guān)注
關(guān)注
1文章
278瀏覽量
1536
發(fā)布評(píng)論請(qǐng)先 登錄
代碼格式化工具Clang-Format提升你的CW32工程質(zhì)量

CW32電機(jī)控制基礎(chǔ)——無(wú)刷直流電機(jī)應(yīng)用分析總結(jié)

CW32電機(jī)控制基礎(chǔ)——無(wú)刷直流電機(jī)的運(yùn)行特性

CW32電機(jī)控制基礎(chǔ)--無(wú)刷電機(jī)無(wú)位置傳感器的轉(zhuǎn)子位置檢測(cè)技術(shù)

【CW32】uart_obj_fw 輕量級(jí)串口框架
【教程】手把手教你用CLion進(jìn)行CW32開(kāi)發(fā)

如何使用新版本J-Flash編程CW32 MCU?

祝賀武漢芯源半導(dǎo)體CW32生態(tài)社區(qū)榮獲立創(chuàng)開(kāi)源硬件平臺(tái)&quot;優(yōu)質(zhì)合作社區(qū)&quot;榮譽(yù)!

【硬核項(xiàng)目】STM32F103 智能小車(chē)全棧開(kāi)發(fā):紅外循跡 / 避障算法 + WiFi 遠(yuǎn)程控制,附原理圖與代碼

藍(lán)牙無(wú)線遙控小車(chē)
【CW32模塊使用】SG90舵機(jī)

代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開(kāi)發(fā)實(shí)戰(zhàn)正式出版

代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開(kāi)發(fā)實(shí)戰(zhàn)正式出版
基于CW32模塊的火焰?zhèn)鞲衅髟O(shè)計(jì)

評(píng)論