新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2019-10-24
- 在线时间
- 8 小时
|
1金钱
我的三线SPI代码:void PotenPiomeTer_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4;//cs 两个数字电位器,是串联的。
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_7;//mosi slk
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
SPI_InitStructure.SPI_Direction=SPI_Direction_1Line_Tx;//单总线发送
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;//第一个时钟上升沿采集数据
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;// (72M/8)=9M
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial=7;
SPI_Init(SPI1,&SPI_InitStructure); SPI_Cmd(SPI1,ENABLE);
MAX5483_CS1_HIGH; //拉高片选不选择
MAX5484_CS2_HIGH;
}
void SPI1_WriteByte(u8 Txdata)
{
u8 ret = 0;
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET)
{
ret++;
if(ret > 200)return;
}
SPI_I2S_SendData(SPI1,Txdata);
}
void Control_Resistance(u8 cs,u8 Com,u8 Retdata,u8 retData)
{
if((Retdata > 0x00 && Retdata < 0xff)||(retData > 0 && retData < 0x03))//判断数据正确在写
{
if(cs == 1)
{
MAX5483_CS1_LOW;
SPI1_WriteByte(Com);
SPI1_WriteByte(Retdata);
SPI1_WriteByte(retData);
MAX5483_CS1_HIGH;
}
else if(cs == 2)
{
MAX5484_CS2_LOW;
SPI1_WriteByte(Com);
SPI1_WriteByte(Retdata);
SPI1_WriteByte(retData);
MAX5484_CS2_HIGH;
}
}
else LED2_ON;
}
int main()
{ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Delay_Init(72); Led_Init();//LED没问题的 Key_Init();//按键外部中断也问题的 PotenPiomeTer_Init(); while(1) {
keyflag = Key_Scan();
switch(keyflag)
{
case 1:value1=value1+destiny;
if(value1 == 0xff ){
value1 = 0xff;//1111 1111
value2 = value2 + destiny;
if(value2 == 0x03){//0000 0011
FLAG = 1;
}
}
Control_Resistance(1,WRITE,value1,value2);
Control_Resistance(2,WRITE,value1,value2);
break;
case 2:value1=value1-destiny;
if(value1 == 0x00 ){
value1 = 0xff;
value2 = value2 - destiny;
if(value2 == 0x00){
FLAG = 1;
}
}
Control_Resistance(1,WRITE,value1,value2);
Control_Resistance(2,WRITE,value1,value2);
break;
default:break;
} else LED1_ON; }} |
|