×
嵌入式 > 技术百科 > 详情

介绍一个蓝牙小车的程序

发布时间:2022-07-07 发布时间:
|

简介:这个是这个蓝牙小车的主程序,单片机用的是stm8,希望对广大爱好智能车的朋友所帮助。


#include "iostm8s103k3.h"


#include "stm8s_uart1.h"


#include "stm8s.h"


void UART1_init(void);


unsigned char c;


void TIM2_Configuration_set(void)


{


TIM2_DeInit();//reset


TIM2_TimeBaseInit(TIM2_PRESCALER_8, 65535);//预分频8,自动重载值为1000


TIM2_SetCounter(100);//设置计时器初值为1000,以产生更新事件 TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);//开定时器中断 TIM2_Cmd(ENABLE);//计时器打开 }


void GPIO_Init_s(void)


{


GPIO_Init(GPIOB, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7,


GPIO_MODE_OUT_PP_LOW_FAST);


GPIO_Init(GPIOA, GPIO_PIN_LNIB, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);


}


void main()


{


disableInterrupts();


CLK_SWR=0XB4; //将HSE置为主时钟源


while(!(CLK_SWCR&0X08));//判断目标时钟源是否准备就绪 CLK_SWCR|=0X02; //=CLK_SWCR|0X02 while(CLK_SWCR&0X01) ; //判断时钟切换是否完成


UART1_init();


GPIO_Init_s();


enableInterrupts();


TIM2_Configuration_set();


while (1) {


while (!(UART1_SR & 0x20));//Loop until the UART1 Receive Data Register is not empty


c= UART1_DR;


}


}


void UART1_init(void)


{


UART1_CR1 = 0x00;//一个起始位,8个数据位.n个停止位 UART1_CR3= 0x00;//一个停止位


UART1_BRR2 = 0x00;//波特率9600


UART1_BRR1 = 0x68;


UART1_CR2= 0x04;//接收使能


}


#pragma vector=UART1_R_RXNE_vector __interruptvoid UART1_RX(void) { c = UART1_DR; // 接收到数据了 while(!UART1_SR_TXE);


}


#pragma vector=15 //TIM2的外部中断向量号是13,加上两个不可屏蔽中断是15__interrupt


void TIM2_IRQ(void)


{


//判断接受到的数据,然后小车运动


if(c==0x44)GPIO_WriteLow(GPIOA, GPIO_PIN_2); GPIO_WriteHigh(GPIOA, GPIO_PIN_1);


if(c==0x88) PB_ODR=0x88;


if(c==0x40) PB_ODR=0x40;


if(c==0x04) PB_ODR=0x04;


if(c==0x00) PB_ODR=0x00;


TIM2_SetCounter(100);//重新赋初值 TIM2_ClearITPendingBit(TIM2_IT_UPDATE); //清中断标志位


} //程序参数纠错


#ifdef USE_FULL_ASSERT


void assert_failed(u8*file,u32 line)


{


while(1)


{


}


}


#endif



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器