stm32藍(lán)牙單片機(jī)小車_第1頁(yè)
stm32藍(lán)牙單片機(jī)小車_第2頁(yè)
stm32藍(lán)牙單片機(jī)小車_第3頁(yè)
stm32藍(lán)牙單片機(jī)小車_第4頁(yè)
stm32藍(lán)牙單片機(jī)小車_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、STM32 小車設(shè)計(jì)(采用 stm32f103c8 開發(fā)板)目錄介紹 2主體設(shè)計(jì) 3硬件設(shè)計(jì) 3電源設(shè)計(jì) 5軟件設(shè)計(jì) 5移植到 M4 開發(fā)板 5Stm32f103c8源碼612介紹用藍(lán)牙控制小車前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)。與藍(lán)牙控制燈沒有很大的區(qū)別。主要用于熟練 Stm32M3 的 串 口 使 用 和 藍(lán) 牙 的 基 本 使 用 , 以 及 L298n 電 機(jī) 驅(qū) 動(dòng) 的 使 用 。主體設(shè)計(jì)硬件設(shè)計(jì)1.選擇 stm32f103c8 核心板2. 選擇藍(lán)牙模塊藍(lán)牙 2.0 與藍(lán)牙 4.0、藍(lán)牙 2.04.0 雙模、藍(lán)牙 5.0 它們使用大同小異, AT 指令大致一樣。 如果能直接使用串口和手機(jī)通信就不

2、需要藍(lán)牙了, 所以單片機(jī)的編程就是針對(duì)串口編程。 不 提手機(jī)有沒有留串口接口, 玩小車無(wú)線控制比有線控制好。 手機(jī)通過(guò)藍(lán)牙串口微信小程序控 制手機(jī)藍(lán)牙與單片機(jī)藍(lán)牙通信, 構(gòu)建了一個(gè)單片機(jī)與手機(jī)的串口通道。 單片機(jī)從串口接到數(shù) 據(jù),判斷數(shù)據(jù)做出相應(yīng)動(dòng)作。3. 選擇 L298n 電機(jī)驅(qū)動(dòng)每個(gè) L298N 有兩個(gè)通道, 分別控制兩個(gè)輪子的正轉(zhuǎn)和反轉(zhuǎn)。 例如通道 a,1、0 正轉(zhuǎn) 0、1 反轉(zhuǎn)、00 和 11 停止。此次使用 2 個(gè) L298n,壞了一個(gè)通道,共使用 3 個(gè)通道, a 通道控制左輪, b 通道控制右輪, c 通道控制后面兩個(gè)輪。電源設(shè)計(jì)12v 電源供給 L298N 電機(jī)驅(qū)動(dòng), 兩個(gè) L

3、298N 共留有 2 個(gè) 5v 輸出的接口。 一個(gè) 5V 接給單 片機(jī),一個(gè) 5V 接給藍(lán)牙,注意共地。軟件設(shè)計(jì)1. L298N 配置封裝兩個(gè)函數(shù),如下:void L298NINIT(void); /L298n 電機(jī)初始化,時(shí)鐘、端口配置void L298Ctrl(uint8_t str) ;/ L298n 方向控制, 參數(shù) 0(停) 1(前) 2(后)3(左)4(右) ,附件源碼。2. 串口配置封裝一個(gè)函數(shù): void USART1INIT(void);/ 串口初始化,時(shí)鐘、端口、波特率、中斷優(yōu)先 級(jí)配置,附件源碼。修改中斷服務(wù)函數(shù), 進(jìn)行接收數(shù)據(jù)判斷, 調(diào)用 L298N的void L298

4、Ctrl(uint8_t str);移植到 M4 開發(fā)板1. 更改頭文件、啟動(dòng)文件,相關(guān)芯片,以及芯片容量2. 查看時(shí)鐘是否對(duì)應(yīng)引腳3. 復(fù)用要連接到串口Stm32f103c8 源碼1. main.c#include "Device/Include/stm32f10x.h" / Device header #include "usart1.h"#include "l298n.h"int main(void)/L298n 電機(jī)初始化 L298NINIT();/usart1 初始化 USART1INIT();/ 對(duì)藍(lán)牙模塊進(jìn)行配置 ble

5、_set_config();/L298Ctrl(1);while(1)2. L298N.c#include "Device/Include/stm32f10x.h" / Device header*brief L298n 電機(jī)初始化,時(shí)鐘、端口配置*param 無(wú)*retval 無(wú)*/void L298NINIT(void)/ 相關(guān)結(jié)構(gòu)體聲明GPIO_InitTypeDef GPIO_InitStructure;/ 端口/ 時(shí)鐘配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockC

6、md(RCC_APB2Periph_GPIOA,ENABLE);/ 端口配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure); / 后輪: c 輪(PB0、1)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4

7、|GPIO_Pin_5;GPIO_Init(GPIOA,&GPIO_InitStructure); / 前輪: A 輪 (PA0、 1)/ 前輪: B 輪 (PA4、5)/ 停止GPIO_SetBits( GPIOA, GPIO_Pin_0);GPIO_SetBits( GPIOA, GPIO_Pin_1);GPIO_SetBits( GPIOA, GPIO_Pin_4);GPIO_SetBits( GPIOA, GPIO_Pin_5);GPIO_SetBits( GPIOB, GPIO_Pin_0);GPIO_SetBits( GPIOB, GPIO_Pin_1);/*brief L

8、298n 電機(jī)方向控制*param advance (前進(jìn))、 retreat (后退)、左轉(zhuǎn)( left )、右轉(zhuǎn)( right ) *retval 無(wú)*/void L298Ctrl(uint8_t str)if(str=0)/ 停止GPIO_ResetBits( GPIOA, GPIO_Pin_0);GPIO_ResetBits( GPIOA, GPIO_Pin_1);GPIO_ResetBits( GPIOA, GPIO_Pin_4);GPIO_ResetBits( GPIOA, GPIO_Pin_5);GPIO_ResetBits( GPIOB, GPIO_Pin_0);GPIO_Re

9、setBits( GPIOB, GPIO_Pin_1);if(str=1)/ 前進(jìn)GPIO_SetBits( GPIOA, GPIO_Pin_0); GPIO_ResetBits( GPIOA, GPIO_Pin_1);GPIO_SetBits( GPIOA, GPIO_Pin_4);GPIO_ResetBits( GPIOA, GPIO_Pin_5);GPIO_SetBits( GPIOB, GPIO_Pin_0);GPIO_ResetBits( GPIOB, GPIO_Pin_1);if(str=2)/ 后退GPIO_SetBits( GPIOA, GPIO_Pin_1); GPIO_Re

10、setBits( GPIOA, GPIO_Pin_0);GPIO_SetBits( GPIOA, GPIO_Pin_5);GPIO_ResetBits( GPIOA, GPIO_Pin_4);GPIO_SetBits( GPIOB, GPIO_Pin_1);GPIO_ResetBits( GPIOB, GPIO_Pin_0);if(str=3)/ 左轉(zhuǎn)GPIO_SetBits( GPIOA, GPIO_Pin_0);GPIO_ResetBits( GPIOA, GPIO_Pin_1);GPIO_ResetBits( GPIOA, GPIO_Pin_5);GPIO_ResetBits( GPIO

11、A, GPIO_Pin_4);GPIO_SetBits( GPIOB, GPIO_Pin_0);GPIO_ResetBits( GPIOB, GPIO_Pin_1);if(str=4)/ 右轉(zhuǎn)GPIO_ResetBits( GPIOA, GPIO_Pin_0);GPIO_ResetBits( GPIOA, GPIO_Pin_1);GPIO_SetBits( GPIOA, GPIO_Pin_4);GPIO_ResetBits( GPIOA, GPIO_Pin_5);GPIO_SetBits( GPIOB, GPIO_Pin_0);GPIO_ResetBits( GPIOB, GPIO_Pin_1

12、);3. usart.c#include "Device/Include/stm32f10x.h" / Device header#include "l298n.h"*brief 串口初始化,時(shí)鐘、端口、波特率、中斷優(yōu)先級(jí)配置(NVIC)*param 無(wú)*retval 無(wú)*/void USART1INIT(void)/ 相關(guān)結(jié)構(gòu)體聲明GPIO_InitTypeDef GPIO_InitStructure;/ 端口USART_InitTypeDef USART_InitStructure; / 串口NVIC_InitTypeDef NVIC_InitStr

13、ucture; /NVIC/ 時(shí)鐘配置SystemInit();/72mRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/ 端口配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;/TX GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitSt

14、ructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;/RX GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure);/ 串口配置USART_InitStructure.USART_BaudRate=9600; / 波特率設(shè)置為 9600 USART_InitStructure.USART_

15、WordLength=USART_WordLength_8b; USART_InitStructure.USART_StopBits=USART_StopBits_1; USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_Non e;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_

16、InitStructure);USART_Cmd(USART1, ENABLE);USART_ITConfig(USART1U, SART_IT_RXNEE, NABLE);/使能或者失能指定的 USART中斷 接收中斷USART_ClearFlag(USART1,USART_FLAG_TC清);/除/ USARTx的待處理標(biāo)志位/NVIC 配置NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQCha

17、nnelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);void USART1_IRQHandler(void)uint8_t data;/ 檢測(cè)是否接收到一個(gè)字節(jié) if(USART_GetITStatus(USART1,USART_IT_RXNE) = SET) / 讀取接收到的字節(jié)data = USART_ReceiveData(U

18、SART1);/ 串口 1 控制 l298nif(data=0x00|data='0')L298Ctrl(0);/ 停止if(data=0x01|data='1')L298Ctrl(1);/ 前進(jìn)if(data=0x02|data='2')L298Ctrl(2);/ 后退if(data=0x03|data='3')L298Ctrl(3);/ 左轉(zhuǎn)if(data=0x04|data='4')L298Ctrl(4);/ 右轉(zhuǎn) / 將接收到字節(jié)發(fā)送給 PCUSART_SendData(USART1,data);/ 清空標(biāo)志位USART_ClearITPendingBit(USART1,USART_IT_RXNE);void usart1_send_str(uint8_t *pstr)/ 字符串寫入串口 1 / 參考 usart1_send_str 代碼uint8_t *p = pstr;while(*p!=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論