#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