stm32f103c8t6驱动paj7620手势识别传感器
简单介绍:
手势识别模块采用的是 I2C 通讯,将模块的 SDA,SCL 分别连接 STM32F103C8T6 板子的 PB7 和 PB6 引脚。VCC 和 GND 分别连接 STM32F103C8T6 的 5V 和 GND
首先,先找到一块stm32f103c8t6核心板,如图:
接通电源,采用st-link下载程序,st-link连线示意图如1:
黄线为VCC,蓝线为SWDIO,绿线是SWDCLK,紫线为GND.
代码如下
测试程序
int main(void)
{
unsigned char i;
unsigned char Gesture_Data;
gotoflag: ;
/* ÅäÖÃSysTick Ϊ10usÖжÏÒ»´Î */
SysTick_Init();
//I2C³õʼ»¯
I2C_Bus_Init();
//NVIC_Configuration();
USARTx_Config();
printf("Gesture Sensor Test Program ...\r\n");
if(!PAJ7620U2_init())
{
printf("\nGesture Sensor Error\r\n");
goto gotoflag;
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
printf("\nGesture Sensor OK\r\n");
I2C_ByteWrite(PAJ_BANK_SELECT, 0);
for (i = 0; i < Gesture_Array_SIZE; i++)
{
I2C_ByteWrite(Init_Gesture_Array[i][0], Init_Gesture_Array[i][1]);//Gesture register initializes
}
while(1)
{
I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
switch(Gesture_Data)
{
case PAJ_UP:
PAJ_delay(800);
I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
if(Gesture_Data == PAJ_FORWARD)
{
printf("Forward\r\n");
PAJ_delay(10000);
}
else if(Gesture_Data == PAJ_BACKWARD)
{
printf("Backward\r\n");
PAJ_delay(10000);
}
else{
printf("Up\r\n");
}
break;
case PAJ_DOWN:
PAJ_delay(800);
I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
if(Gesture_Data == PAJ_FORWARD)
{
printf("Forward\r\n");
PAJ_delay(10000);
}
else if(Gesture_Data == PAJ_BACKWARD)
{
printf("Backward\r\n");
PAJ_delay(10000);
}
else{
printf("Down\r\n");
}
break;
case PAJ_LEFT:
PAJ_delay(800);
I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
if(Gesture_Data == PAJ_FORWARD)
{
printf("Forward\r\n");
PAJ_delay(10000);
}
else if(Gesture_Data == PAJ_BACKWARD)
{
printf("Backward\r\n");
PAJ_delay(10000);
}
else{
printf("Left\r\n");
}
break;
case PAJ_RIGHT:
PAJ_delay(800);
I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
if(Gesture_Data == PAJ_FORWARD)
{
printf("Forward\r\n");
PAJ_delay(10000);
}
else if(Gesture_Data == PAJ_BACKWARD)
{
printf("Backward\r\n");
PAJ_delay(10000);
}
else{
printf("Right\r\n");
}
break;
case PAJ_FORWARD:
printf("Forward\r\n");
PAJ_delay(10000);
break;
case PAJ_BACKWARD:
printf("Backward\r\n");
PAJ_delay(10000);
break;
case PAJ_CLOCKWISE:
printf("Clockwise\r\n");
break;
case PAJ_COUNT_CLOCKWISE:
printf("AntiClockwise\r\n");
break;
default:
I2C_BufferRead(PAJ_INT_FLAG2,&Gesture_Data,1);
if(Gesture_Data == PAJ_WAVE)
{
printf("Wave\r\n");
}
break;
}
PAJ_delay(1000);
}
}
使用st-link下载程序后,使用串口测试功能,串口通信代码如下,波特率115200,PA9-------TX,PA10---------RX
#ifndef __USART1_H
#define __USART1_H
#include "stm32f10x.h"
#include <stdio.h>
#define macUSART_BAUD_RATE 115200
#define macUSARTx USART1
#define macUSART_APBxClock_FUN RCC_APB2PeriphClockCmd
#define macUSART_CLK RCC_APB2Periph_USART1
#define macUSART_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd
#define macUSART_GPIO_CLK (RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO)
#define macUSART_TX_PORT GPIOA
#define macUSART_TX_PIN GPIO_Pin_9
#define macUSART_RX_PORT GPIOA
#define macUSART_RX_PIN GPIO_Pin_10
#define macUSART_IRQ USART1_IRQn
#define macUSART_INT_FUN USART1_IRQHandler
void USARTx_Config(void);
void NVIC_Configuration(void);
void Usart_SendStr_length( USART_TypeDef * pUSARTx, uint8_t *str,uint32_t strlen );
void Usart_SendString( USART_TypeDef * pUSARTx, uint8_t *str);
int fputc(int ch, FILE *f);
int fgetc(FILE *f);
#endif /* __USART1_H */
测试串口,打开串口调试助手
注意:这里需要使用usb转ttl,其TX连接stm32f103c8t6的PA10(RX),其RX连接stm32f103c8t6的PA9(TX)
使用usb转ttl后,电脑端口处才会出现CH340,不然端口是无法识别出串口的
完成后,打开串口调试助手
这时需要按一下stm32f103c8t6的复位键,才会开始串口检测
开始指定手势测试
每次挥动手势都会串口回复,实验成功。