前言:GPIO信号完整性测试,GPIO电源完整性测试
串行数据信号传输有很多协议,常见的包括RS232,RS485,SPI等,ARM板一般都会有USART串口、SPI接口,使用时直接可通过软件实现。但ARM芯片暂时还没有SSI接口,通过查阅资料,可设置SPI相应模式实现SSI信号数据的接收【详见正点原子编写的STM32F4开发指南-库函数版本_V1.1-第23章】。
当前接触到的旋转编码器大多是SSI接口,碰到ARM板上的SPI接口被占用或未引出,着实是一件麻烦的事。但既然是串行数据传输,必然是可以通过ARM芯片上普通的GPIO口读取的。本次实验所用到的ARM芯片型号为STM32F415ZGT6,三斯12位型旋转编码器HAE18U5V12A1(原理同磁编码器AS5040),本次实验根据板子的实际情况选用的GPIO口为PC6、PC7、PE5(也可选用其他空闲的端口).
先看一下12位编码器的SSI串行信号:
图1. 12位编码器SSI串行信号
信号包括三个:使能CSn,时钟CLK,编码器数据DO。一个完整的输出数据DO包括前12位有效数据和后6位校验数据,共18位。如此以来便不难实现信号的读取,只需将三个GPIO口分别设置为使能端口、时钟端口和数据接收端口即可。
步骤一:首先将PC7设置为复用功能PWM输出。查阅STM32F407ZGT6芯片手册(P57,stm32f4xx的芯片手册都差不多)可得PC7复用TIM3的第二个通道。相关代码见【3】pwm.c。输出的PWM作为时钟信号用,本实验设置的时钟频率(也即PWM频率)为2kHz。