pixy视觉追踪模块,使用串口通信,只需在主程序调用即可。
源程序如下:
- #include "pixy/pixy.h"
- uint16_t a,b,c,d,e;
-
- uint8_t Raw_Data[40];//原始数据大包,为解串准备
- uint8_t counter;//计数用
- void usart2_init(u32 baudRate)
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
-
- GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
-
- //UART2 GPIO TX配置
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- //UART2 GPIO RX配置
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- //UART 数据格式配置
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
- USART_InitStructure.USART_BaudRate = baudRate;
- USART_Init(USART2, &USART_InitStructure);
-
- //中断配置
- USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
- NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- USART_Cmd(USART2, ENABLE); //使能串口
-
- USART_ClearFlag(USART2, USART_FLAG_TC);
-
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启相关中断
- //Usart NVIC 配置
- NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口2中断通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级1
- NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级0
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
- NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、
- }
- void USART2_IRQHandler(void) //Pixy_Uart_ReadData
- {
- int i;
-
- if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //等待读取数据寄存器DR
- {
- USART_ClearITPendingBit(USART2,USART_IT_RXNE);
- Raw_Data[counter] = USART_ReceiveData(USART2);
- counter++;
- if(counter == 40)
- {
- counter=0; //重新回数组头
-
- for(i=0;i<40;i++) //计算更新一次坐标
- {
- if((Raw_Data[i] == 0x55)&&(Raw_Data[i+1] == 0xaa)&&(Raw_Data[i+2] == 0x55)&&(Raw_Data[i+3] == 0xaa))
- {
- a= Raw_Data[i+6] + Raw_Data[i+7]*256; // a 颜色代号
- b= Raw_Data[i+8] + Raw_Data[i+9]*256; // b X坐标
- c= Raw_Data[i+10] + Raw_Data[i+11]*256; // c Y坐标
- d= Raw_Data[i+12] + Raw_Data[i+13]*256; // d width
- e= Raw_Data[i+14] + Raw_Data[i+15]*256; // e height
- break; // 跳出for循环
- }
- }
-
- }
- }
- }
复制代码
所有资料51hei提供下载:
pixy.zip
(1.67 KB, 下载次数: 13)
|