完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
这是我在csdn上的第一篇博客,这次主要是想记录一下我之前做的USB鼠标实验移植的过程。移植过程与正点原子USB鼠标实验教程类似,注意移植时,如果遇到串口初始化等的函数,要使用自己工程里的串口初始化函数。移植时主要是主函数会出现问题,移植时主函数如下。
#include “led.h” #include “delay.h” #include “key.h” #include “sys.h” #include “lcd.h” #include “uart.h” #include “i2c.h” #include “touch.h” #include “u***_lib.h” #include “hw_config.h” #include "u***_pwr.h” //装载画图界面 void Load_Draw_Dialog(void) { LCD_Clear(White);//清屏 POINT_COLOR=Blue;//设置字体为蓝色 GUI_Text(320-24,0,“RST”,Blue,White);//显示清屏区域 POINT_COLOR=Red;//设置画笔蓝色 } //计算x1,x2的绝对值 u32 u***_abs(u32 x1,u32 x2) { if(x1>x2)return x1-x2; else return x2-x1; } int main(void) { u8 key; u8 i=0; s8 x0; //发送到电脑端的坐标值 s8 y0; u8 keysta; //[0]:0,左键松开;1,左键按下; //[1]:0,右键松开;1,右键按下 //[2]:0,中键松开;1,中键按下 u8 tpsta=0; //0,触摸屏第一次按下;1,触摸屏滑动 short xlast; //最后一次按下的坐标值 short ylast; USB_Pull_Up(); delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组设置 USART1_Config();//串口初始化为9600 LED_GPIO_Config(); //初始化与LED连接的硬件接口 LCD_Initializtion(); //初始化LCD Key_GPIO_Config(); //按键初始化 TP_Init(); //初始化触摸屏 POINT_COLOR=Red; USB_PULL; // TP_Adjust(); GUI_Text(60,50,“STM32F103”,Red,White); GUI_Text(60,70,“USB Mouse TEST”,Red,White); GUI_Text(60,90,“2019/12/28”,Red,White); // LCD_ShowString(60,150,200,16,16,“KEY1:RIGHT BTN”); // LCD_ShowString(60,170,200,16,16,“KEY0:LEFT BTN”); delay_ms(1800); USB_Port_Set(0); //USB先断开 delay_ms(300); USB_Port_Set(1); //USB再次连接 //USB配置 USB_Interrupts_Config(); Set_USBClock(); USB_Init(); Load_Draw_Dialog(); while(1) { // //KEY key=KEY_Scan(1);//支持连按 // if(Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON) // { // key =2; //板子上按键KEY2 // } // else if(Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON) // { // key = 3; //按键KEY3 // } // else if(Key_Scan(KEY3_GPIO_PORT,KEY3_GPIO_PIN) == KEY_ON) // { // key = 4; //按键KEY4 // } // else if(Key_Scan(KEY0_GPIO_PORT,KEY0_GPIO_PIN) == KEY_OFF) // { // key = 1; //按键KEY1 // } // else // { // key = 0; // } // if(key) { //按键KEY1按下,滚轮 if(key3)Joystick_Send(0,0,0,1); //发送滚轮数据到电脑 else { //按下key2,鼠标左键 if(key2)keysta|=0X01; //发送鼠标左键 if(key==4)keysta|=0X02; //发送鼠标右键 Joystick_Send(keysta,0,0,0); //发送给电脑 } }else if(keysta)//之前有按下 { keysta=0; Joystick_Send(0,0,0,0); //发送松开命令给电脑 } //TOUCH tp_dev.scan(0); if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下 { //最少移动5个单位,才算滑动 if(((u***_abs(tp_dev.x[0],xlast)>4)||(u***_abs(tp_dev.y[0],ylast)>4))&&tpsta==0)//等待滑动 { xlast=tp_dev.x[0]; //记录刚按下的坐标 ylast=tp_dev.y[0]; tpsta=1; } if(tp_dev.x[0]<320&&tp_dev.y[0]<240) { if(tp_dev.x[0]>(320-24)&&tp_dev.y[0]<16)Load_Draw_Dialog();//清除 else TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],Red); //画图 if(bDeviceState==CONFIGURED) { if(tpsta)//滑动 { x0=(xlast-tp_dev.x[0])*3; //上次坐标值与得到的坐标值之差,扩大2倍 y0=(ylast-tp_dev.y[0])*3; xlast=tp_dev.x[0]; //记录刚按下的坐标 ylast=tp_dev.y[0]; Joystick_Send(keysta,-x0,-y0,0); //发送数据到电脑 delay_ms(5); } } } }else { tpsta=0; //清除 delay_ms(1); } //USB配置成功的标志 if(bDeviceState==CONFIGURED)LED2_ON;//当USB配置成功了,LED1亮,否则,灭 else LED2_OFF; i++; if(i==200) { i=0; LED1_TOGGLE; } } } 在移植时,我遇到的一个问题是USB总是配置不成功,后来看了原理图才发现我的原理图USB的D+连接的上拉电阻直接连接到了单片机IO口USB_CK上,所以在使用时要给这个IO口赋高电平,在上面的代码中USB_Pull_Up()函数是这个IO口的初始化,USB_PULL是把这个IO口拉高的宏定义。 进行了上面的操作后,整个代码基本没有什么问题了,但是还是没有模拟成功鼠标,开发板连接到电脑后,电脑识别了新硬件,但是没有将这个硬件识别为鼠标,所以此时将电脑识别的新硬件在设备管理器中卸载,卸载的时候一定要连驱动一起卸载,卸载后将开发板与电脑连接的USB线拔掉再插上,就可以看到电脑将开发板识别为鼠标了。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:34 , Processed in 1.099083 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号