初级会员
- 积分
- 103
- 金钱
- 103
- 注册时间
- 2018-11-20
- 在线时间
- 23 小时
|
发表于 2018-11-28 15:30:38
|
显示全部楼层
你好,我在spi通信就遇到了问题,看了好多例程、源码,都不管用。只要写了端口初始化、复位、测试这几部分的代码
#include "gp21.h"
void DelayNS(unsigned long dly)
{
unsigned int i;
for(i=0;i<dly;i++);
}
void SPI2_TDC_INIT(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOE_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_14;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOE,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_13;
GPIO_Initure.Mode=GPIO_MODE_INPUT; //输入
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
HAL_GPIO_Init(GPIOE,&GPIO_Initure);
}
void TDC_Configuration(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_11;//GPIO_PIN_9|GPIO_PIN_10|
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOD,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_5;//|GPIO_PIN_7
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOG,&GPIO_Initure);
}
void TDC_RESET(void)
{
SET_TDC_RESET();
DelayNS(100);
CLR_TDC_RESET();
DelayNS(100);
SET_TDC_RESET();
DelayNS(100);
}
unsigned char Test_SPI_Communicate(void)
{
int register1 = 0x81ffffff;
unsigned char test_reg=0xb4; //读结果寄存器5,反映寄存器1 的高8 位
unsigned char test_reg0=0x00;
// unsigned char test_reg1=0x81; //读结果寄存器5,反映寄存器1 的高8 位
DelayNS(500);
CLR_TDC_NSS();
DelayNS(5);
for (int i=0;i<32;i++)
{
SET_TDC_SCK();
DelayNS(5);
if (register1&0x80000000)
{
SET_TDC_SI();
}
else
CLR_TDC_SI();
DelayNS(5);
CLR_TDC_SCK();
DelayNS(5);
register1=register1<<1;
}
DelayNS(5);
SET_TDC_NSS();
DelayNS(500);
CLR_TDC_NSS();
DelayNS(5);
for (int i=0;i<8;i++)
{
SET_TDC_SCK();
DelayNS(5);
if (test_reg&0x80)
SET_TDC_SI();
else
CLR_TDC_SI();
DelayNS(5);
CLR_TDC_SCK();
DelayNS(5);
test_reg=test_reg<<1;
}
for(int j=0;j<8;j++)
{
SET_TDC_SCK();
DelayNS(5);
test_reg0=test_reg0<<1;
if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_13) ==0)
{
test_reg0 &=0x01;
}
else
{
test_reg0 |=0x01;
}
CLR_TDC_SCK();
DelayNS(5);
}
SET_TDC_NSS();
return test_reg0;
}
大哥们,可以看看问题在哪吗 |
|