声明:此文章方便新手快速使用感为灰度传感器,代码是从官方文章和例程总结下来的。官方提供三种方法,第一种用的gpio过多,第三种iic对于新手不友好,第二种,串行读取数据,我个人认为最方便上手。
1、在系统文件上配置gpio口(CLK,DAT),gpio口可以随便选,CLK输出,DAT输入,其他默认选项。打开嘀嗒计时器(systick),配置到1us(period=32)。使能systick。
2、配置board.c文件,用到微秒延时,.h自己写就行
#include "board.h"
#include "stdio.h"
void delay_us(unsigned long __us)
{
uint32_t ticks;
uint32_t told, tnow, tcnt = 38;
ticks = __us * (32000000 / 1000000);
told = SysTick->VAL;
while (1)
{
tnow = SysTick->VAL;
if (tnow != told)
{
if (tnow < told)
tcnt += told - tnow;
else
tcnt += SysTick->LOAD - tnow + told;
told = tnow;
if (tcnt >= ticks)
break;
}
}
}
3、创建灰度传感器.c文件,.h自己写就行。
#include "ti_msp_dl_config.h"
#include "GreySensor.h"
#include "board.h"
unsigned char Digtal;//用于存放灰度传感器的数据//全亮11111111,全灭00000000
uint8_t gw_gray_serial_read()
{
uint8_t ret = 0;
uint8_t i;
for (i = 0; i < 8; ++i) {
/* 输出时钟下降沿 */
DL_GPIO_clearPins(GPIOB, Grey_Sensors_Serial_CLK_PIN);
delay_us(2);
//避免GPIO翻转过快导致反应不及时
ret |= (DL_GPIO_readPins(GPIOB, Grey_Sensors_Serial_DAT_PIN)==0?0:1) << i;
/* 输出时钟上升沿,让传感器更新数据*/
DL_GPIO_setPins(GPIOB, Grey_Sensors_Serial_CLK_PIN);
/* 延迟需要在5us左右 */
delay_us(5);
return ret;
}
4、在main函数循环调用读取函数。
extern unsigned char Digtal;
//用于存放灰度传感器的数据
//全亮11111111,全灭00000000
int main(void){
SYSCFG_DL_init();
while(1) {
Digtal=gw_gray_serial_read();//读取灰度传感器数据存入Digtal
sprintf(str,"%d%d%d%d%d%d%d%d",(Digtal>>0)&0x01,(Digtal>>1)&0x01,(Digtal>>2)&0x01,(Digtal>>3)&0x01,(Digtal>>4)&0x01,(Digtal>>5)&0x01,(Digtal>>6)&0x01,(Digtal>>7)&0x01); //OLED_ShowString(0, 6, (uint8_t *)str,16);//OLED显示数据
5、使用前记得校准,不接任何跳线冒。