一.配置方法

二.串口中断
u8 i;
u16 buf[20],res;
u8 receiving_flag = 0; // 新增一个标志,用于标记是否开始接收数组
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
res = USART_ReceiveData(USART1);
if(receiving_flag == 0)
{
i=0;
buf[0] = res;
if(res == 'B')
{
receiving_flag = 1;
i++;
}
}
else if(receiving_flag == 1)
{
buf[i] = res;
i++;
if(res == 'E')
{
receiving_flag = 2;
}
if(i>=19)
{
i = 0;
receiving_flag = 0;
}
}
USART_ClearFlag(USART1, USART_FLAG_RXNE);
}
}
void Usart1_Init(unsigned int baud)
{
GPIO_InitTypeDef gpio_initstruct;
USART_InitTypeDef usart_initstruct;
NVIC_InitTypeDef nvic_initstruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//PA9 TXD
gpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;
gpio_initstruct.GPIO_Pin = GPIO_Pin_9;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
//PA10 RXD
gpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
gpio_initstruct.GPIO_Pin = GPIO_Pin_10;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
usart_initstruct.USART_BaudRate = baud;
usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //接收和发送
usart_initstruct.USART_Parity = USART_Parity_No; //无校验
usart_initstruct.USART_StopBits = USART_StopBits_1; //1位停止位
usart_initstruct.USART_WordLength = USART_WordLength_8b; //8位数据位
USART_Init(USART1, &usart_initstruct);
USART_Cmd(USART1, ENABLE); //使能串口
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收中断
nvic_initstruct.NVIC_IRQChannel = USART1_IRQn;
nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;
nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0;
nvic_initstruct.NVIC_IRQChannelSubPriority = 2;
NVIC_Init(&nvic_initstruct);
}
三.子板获取数据
//反向控制接受
void toContent(){
if(receiving_flag == 2)
{
receiving_flag = 0;
for(a = 0; a < 20; a++) {
if(buf[a]=='W'){
maxyw=buf[a+1];
}
if(buf[a]=='x'){
yw=buf[a+1];
}
if(buf[a]=='b'){
FLAME=buf[a+1];
}
}
}
}
四.主板发送数据
void zigbeTOb(){
if(time_count>100)
{
time_count = 0;
USART_SendData(USART1,'B');
delay_ms(1);
USART_SendData(USART1,'x');
delay_ms(1);
USART_SendData(USART1,yw);
delay_ms(1);
USART_SendData(USART1,'b');
delay_ms(1);
USART_SendData(USART1,FLAME);
delay_ms(1);
USART_SendData(USART1,'E');
delay_ms(1);
}
}