stm32cube,hal库来实现PS2手柄数据发送
很久前买了个PS2的手柄,如下,之前
以前不会使用cube来配置工程,导致写程序很麻烦,对我这样的新手很不友好,看卖家提供的程序也很麻烦,拉高拉低的。现在接触了cube,决定用cube库来实现下,这样添加或者更改配置也方便。
1.cube配置
我使用的是STM32F103C8芯片,需要配置SPI,引脚随意,默认或者自己改都行,spi配置如下
8位数据,LSB低位在前,分频依据时钟定,主要是波特率250k bits/s,时钟极性高,就是说平时是高,时钟相位是1edg,说明在下降沿发送,检验DISABLE,NSS选择软件方式。然后自己选择了一个GOIP口,功能为GPIO_OUTPUT,这个连接ps2的CS脚。
连线
配置的GPIO——output连接ps2的CS,MOS连接CMD,MISO连接DATA,时钟连时钟,上电
写程序
我就不放源码了,就两句话,简单的很,核心就是先拉低CS脚,发送一个0x01,等1ms,然后发送0x42,并且接收data[1],就是手柄的ID(绿灯模式是0x41),然后再发送接收,根据接收到的数据判断哪一位按下(按下为0,否则为1)。具体的时序网上有,也可以看下图
总结
其实用HAL库很简单的SPI发送接收就完成了,之前调试了一天卡住我的地方就是它需要延时,需要反应时间,加入一个延时后,SPI才能接收到正确的数。主函数里调用时,也不能过于频繁,100ms一次没有问题。
附注:之前在网上看如何使用AC6编译器的时候感觉步骤好多,但是下载新的包,更新软件后,直接就能使用了,什么都不用改,不知道为什么。