2019-07-21 06:47发布
半日键盘侠 发表于 2018-11-28 15:30 你好,我在spi通信就遇到了问题,看了好多例程、源码,都不管用。只要写了端口初始化、复位、测试这几部分 ...
Glove 发表于 2018-12-3 08:23 因为不知道你的硬件情况,你应该先检查你的SPI,SPI通信成功以后才能对TDC进行配置
半日键盘侠 发表于 2018-12-3 10:42 谢谢你,是硬件问题,已解决
最多设置5个标签!
#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;
}
大哥们,可以看看问题在哪吗
因为不知道你的硬件情况,你应该先检查你的SPI,SPI通信成功以后才能对TDC进行配置
谢谢你,是硬件问题,已解决
tdc中断有五种可以配置,我看手册,中断配置是可以五种中断同时配置为1的,那么在中断回调函数处理的时候,如何知道是那种情况触发的中断。
一周热门 更多>