STM32 ZIBEE DL-20 无线串口模块

 一.配置方法

 二.串口中断

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);
		}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值