stm32蓝牙单片机小车Word下载.docx
- 文档编号:20852749
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:1.10MB
stm32蓝牙单片机小车Word下载.docx
《stm32蓝牙单片机小车Word下载.docx》由会员分享,可在线阅读,更多相关《stm32蓝牙单片机小车Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
一个5V接给单片机,一个5V接给蓝牙,注意共地。
软件设计
1.L298N配置
封装两个函数,如下:
voidL298NINIT(void);
//L298n电机初始化,时钟、端口配置
voidL298Ctrl(uint8_tstr);
//L298n方向控制,参数0(停)1(前)2(后)3(左)4(右)
,附件源码。
2.串口配置
封装一个函数:
voidUSART1INIT(void);
//串口初始化,时钟、端口、波特率、中断优先级配置,附件源码。
修改中断服务函数,进行接收数据判断,调用L298N的voidL298Ctrl(uint8_tstr);
移植到M4开发板
1.更改头文件、启动文件,相关芯片,以及芯片容量
2.查看时钟是否对应引脚
3.复用要连接到串口
Stm32f103c8源码
1.main.c
#include"
Device/Include/stm32f10x.h"
//Deviceheader
usart1.h"
l298n.h"
intmain(void)
{
//L298n电机初始化
L298NINIT();
//usart1初始化
USART1INIT();
//对蓝牙模块进行配置
ble_set_config();
//L298Ctrl
(1);
while
(1)
{
}
}
2.L298N.c
/**
*@briefL298n电机初始化,时钟、端口配置
*@param无
*@retval无
*/
voidL298NINIT(void)
//相关结构体声明
GPIO_InitTypeDefGPIO_InitStructure;
//端口
//时钟配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(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|GPIO_Pin_5;
GPIO_Init(GPIOA,&
//前轮:
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);
*@briefL298n电机方向控制
*@paramadvance(前进)、retreat(后退)、左转(left)、右转(right)
voidL298Ctrl(uint8_tstr)
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_ResetBits(GPIOB,GPIO_Pin_1);
if(str==1)//前进
if(str==2)//后退
if(str==3)//左转
if(str==4)//右转
3.usart.c
*@brief串口初始化,时钟、端口、波特率、中断优先级配置(NVIC)
voidUSART1INIT(void)
USART_InitTypeDefUSART_InitStructure;
//串口
NVIC_InitTypeDefNVIC_InitStructure;
//NVIC
SystemInit();
//72m
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
//端口配置
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
//TX
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
//RX
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
//串口配置
USART_InitStructure.USART_BaudRate=9600;
//波特率设置为9600
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,&
USART_InitStructure);
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//使能或者失能指定的USART中断接收中断
USART_ClearFlag(USART1,USART_FLAG_TC);
//清除USARTx的待处理标志位
//NVIC配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&
NVIC_InitStructure);
voidUSART1_IRQHandler(void)
uint8_tdata;
//检测是否接收到一个字节
if((USART_GetITStatus(USART1,USART_IT_RXNE))==SET)
//读取接收到的字节
data=USART_ReceiveData(USART1);
{//串口1控制l298n
if(data==0x00||data=='
0'
)L298Ctrl(0);
//停止
if(data==0x01||data=='
1'
)L298Ctrl
(1);
//前进
if(data==0x02||data=='
2'
)L298Ctrl
(2);
//后退
if(data==0x03||data=='
3'
)L298Ctrl(3);
//左转
if(data==0x04||data=='
4'
)L298Ctrl(4);
//右转
//将接收到字节发送给PC
USART_SendData(USART1,data);
//清空标志位
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
voidusart1_send_str(uint8_t*pstr)//字符串写入串口1
//参考usart1_send_str代码
uint8_t*p=pstr;
while(*p!
='
\0'
)
USART_SendData(USART1,*p);
//等待串口发送完成
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
p++;
voiddelay_ms(uint32_tt)
while(t--)
SysTick->
CTRL=0;
//DisableSysTick
LOAD=SystemCoreClock/1000;
//1ms
VAL=0;
//Clearcurrentvalueaswellascountflag
CTRL=5;
//EnableSysTicktimerwithprocessorclock
while((SysTick->
CTRL&
0x00010000)==0);
//Waituntilcountflagisset
//DisableSysTick
voidble_set_config(void)//蓝牙配置
usart1_send_str("
AT+NAMExiaozhe\r\n"
);
delay_ms(500);
AT+RESET\r\n"
delay_ms(2000);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm32 蓝牙 单片机 小车