25.11.2016, 23:10
|
|
Временная регистрация
Регистрация: 28.07.2011
Адрес: Петропавловск, Казахстан.
Сообщений: 61
Сказал спасибо: 10
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Не могу считать данные с RFFC5071!!!
Сообщение от NewWriter
|
Может, стоит начать изучение с чего-то попроще? Поверьте, это эффективнее.
В МК есть как минимум два SPI. Настройте их так, чтобы один передавал другому хотябы пару любых байт. Это и будет первой решенной задачей. Задача бесполезная, зато решенная
|
NewWriter абсолютно прав - пробуйте с меньшего, получив результат - офигеете.
|
|
|
|
29.11.2016, 18:47
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не могу считать данные с RFFC5071!!!
Я перечитал в очередной раз даташит на RFFC5071 и оказывается он не должен подключаться через SPI к СТМ. Я так понял, что необходимо самостоятельно писать интерфейс, в соответствии с временной диаграммой считывания и записи данных!
Я написал такой код для СТМ32Ф103С8:
Нажмите, чтобы открыть спойлер
//usart2_rx-PA3, usart2_tx-PA2
//spi1_mosi-pa7,spi1_miso-pa6,spi1_sck-pa5,spi1_nss-pa4
#include "stm32f10x.h"
uint32_t i;
uint8_t temp, temp1;
void one()
{
GPIOA-›ODR|=GPIO_ODR_ODR5;//sck=1
for (i=0;i‹1;i++);
return;
}
void zero()
{
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹1;i++);
return;
}
void imp_inv()
{
zero();
one();
return;
}
void imp_norm()
{
one();
zero();
return;
}
int main()
{
RCC-›APB2ENR=RCC_APB2ENR_IOPAEN;
GPIOA-›CRL&=~GPIO_CRL_CNF1;//enbl,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE1;//max
GPIOA-›ODR&=~GPIO_ODR_ODR1;
GPIOA-›CRL&=~GPIO_CRL_CNF2;//resetx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE2;//max
GPIOA-›ODR&=~GPIO_ODR_ODR2;
GPIOA-›CRL&=~GPIO_CRL_CNF4;//enx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE4;//max
//GPIOA-›ODR&=~GPIO_ODR_ODR4;
GPIOA-›ODR|=GPIO_ODR_ODR4;
GPIOA-›CRL&=~GPIO_CRL_CNF5;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE5;//max
GPIOA-›ODR&=~GPIO_ODR_ODR5;
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sdata,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
//
GPIOA-›ODR&=~GPIO_ODR_ODR2;//resetx=0
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›ODR&=~GPIO_ODR_ODR1;//enbl=0
for (i=0;i‹100;i++);
GPIOA-›ODR|=GPIO_ODR_ODR2;//resetx=1
while (1)
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
//write addr 0x15, data=0x8000
one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();
//write addr 0x15
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
//write addr data=0x8000
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹10;i++);
//write addr 0x15 and read flag, read dATA
one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();
//write addr 0x15 with r=1
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›CRL&=~GPIO_CRL_MODE7;//sdata,inp
GPIOA-›CRL&=~GPIO_CRL_CNF7;//
GPIOA-›CRL|=GPIO_CRL_CNF7_0;//pp
imp_norm();
//read data
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_norm();
for (i=0;i‹10;i++);
}
}
По осциллографу тактовые импульсы, импульсы данных на передачу верные. Но импульса принимаемых данных НЕТ!!! Как я понял, я должен принимать 0х8000.
Может кто подскажет что не так!!!!
Спасибо!
|
|
|
|
29.11.2016, 20:14
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Не могу считать данные с RFFC5071!!!
Дмитрий1987, тебе или лечиться надо или начинать изучать основы. Ты даже документацию осознать не можешь.
__________________
Осторожно , злой кот
|
|
|
|
30.11.2016, 06:32
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не могу считать данные с RFFC5071!!!
Dosikus, я так понимаю вы профессиональный программист и, когда вы первый раз читаете даташит на микросхему, вы сразу все понимаете, тут же пишете программу, и у вас микросхема с первого раза работает правильно! И опыт в разработке программ у вас просто немыслимый!
Я же пока еще где-то на дне и, прочитав даташит даже раз 10, не получается все осознать, и на разработку простейших программок у меня уходит пока недели две!
Вот я и обратился на этот форум, чтоб такие же профессионалы как вы посмотрели на мой донный код и сказали, что, если его модернизировать так-то, так-то, то сразу все заработает!
|
|
|
|
30.11.2016, 11:22
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не могу считать данные с RFFC5071!!!
Я код подправил, лучше подпаяли выводы RFFC5071 и все заработало! Я начал получать данные и с регистра 0х15, и с регистра 0х00!
Кому интересно, вот рабочий код по считыванию данных с RFFC5071 на СТМ32Ф103С8!
Нажмите, чтобы открыть спойлер
#include "stm32f10x.h"
uint32_t i;
uint8_t temp, temp1;
void one()
{
GPIOA-›ODR|=GPIO_ODR_ODR5;//sck=1
for (i=0;i‹1;i++);
return;
}
void zero()
{
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹1;i++);
return;
}
void imp_inv()
{
zero();
one();
return;
}
void imp_norm()
{
one();
zero();
return;
}
//write addr 0x15, data=0x8000
void WR15_8000()
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();
//write addr 0x15
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
//write addr data=0x8000
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹10;i++);
}
//write addr 0x15 and read flag, read dATA
void RD15()
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();
//write addr 0x15 with r=1
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›CRL&=~GPIO_CRL_MODE7;//sdata,inp
GPIOA-›CRL&=~GPIO_CRL_CNF7;//
GPIOA-›CRL|=GPIO_CRL_CNF7_0;//pp
imp_norm();
//read data
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_norm();
for (i=0;i‹10;i++);
}
//write addr 0x00 and read flag, read dATA
void RD00()
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›CRL&=~GPIO_CRL_MODE7;//sdata,inp
GPIOA-›CRL&=~GPIO_CRL_CNF7;//
GPIOA-›CRL|=GPIO_CRL_CNF7_0;//pp
imp_norm();
//read data
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_norm();
for (i=0;i‹10;i++);
}
int main()
{
RCC-›APB2ENR=RCC_APB2ENR_IOPAEN;
GPIOA-›CRL&=~GPIO_CRL_CNF1;//enbl,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE1;//max
GPIOA-›ODR&=~GPIO_ODR_ODR1;
GPIOA-›CRL&=~GPIO_CRL_CNF2;//resetx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE2;//max
GPIOA-›ODR&=~GPIO_ODR_ODR2;
GPIOA-›CRL&=~GPIO_CRL_CNF4;//enx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE4;//max
//GPIOA-›ODR&=~GPIO_ODR_ODR4;
GPIOA-›ODR|=GPIO_ODR_ODR4;
GPIOA-›CRL&=~GPIO_CRL_CNF5;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE5;//max
GPIOA-›ODR&=~GPIO_ODR_ODR5;
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sdata,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
//initialize
GPIOA-›ODR&=~GPIO_ODR_ODR2;//resetx=0
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›ODR&=~GPIO_ODR_ODR1;//enbl=0
for (i=0;i‹100;i++);
GPIOA-›ODR|=GPIO_ODR_ODR2;//resetx=1
WR15_8000();
while (1)
{
//RD15();
RD00();
}
}
|
|
|
|
30.11.2016, 11:30
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Не могу считать данные с RFFC5071!!!
Дмитрий1987, Вы мой пост читали ? https://kazus.ru/forums/showpost.php...92&postcount=9
Там все что вам нужно.
А ваш софтовый ногодрыг никому не нужен...
__________________
Осторожно , злой кот
|
|
|
|
01.12.2016, 14:50
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не могу считать данные с RFFC5071!!!
Вот рабочий код по конфигурированию регистров RFFC5071!
Нажмите, чтобы открыть спойлер
//resetx-pa2, enbl-pa1,sdata-pa7, sck-pa5, enx-pa4
#include "stm32f10x.h"
uint32_t i, j,temp2,temp3;
uint8_t temp, temp1;
//uint32_t B[3]={0x133a,0x7645,0xa200};//500M
uint32_t B[3]={0x1ec6,0x89ba,0x5e00};//200M
//uint32_t B[3]={0x12ca,0xb13b,0x1300};//245M
void one()
{
GPIOA-›ODR|=GPIO_ODR_ODR5;//sck=1
for (i=0;i‹1;i++);
return;
}
void zero()
{
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹4;i++);
return;
}
void imp_inv()
{
zero();
one();
return;
}
void imp_norm()
{
one();
zero();
return;
}
void WR(uint8_t A, uint32_t D)
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();
for (j=0;j‹8;j++)
{
temp1=0x80››j;
temp=A;
temp=temp&temp1;
if (temp==temp1)
{
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
}
else
{
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
}
imp_inv();
}
for (j=0;j‹16;j++)
{
temp3=0x8000››j;
temp2=D;
temp2=temp2&temp3;
if (temp2==temp3)
{
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
}
else
{
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
}
imp_inv();
}
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹10;i++);
return;
}
int main()
{
RCC-›APB2ENR=RCC_APB2ENR_IOPAEN;
GPIOA-›CRL&=~GPIO_CRL_CNF1;//enbl,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE1;//max
GPIOA-›ODR&=~GPIO_ODR_ODR1;
GPIOA-›CRL&=~GPIO_CRL_CNF2;//resetx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE2;//max
GPIOA-›ODR&=~GPIO_ODR_ODR2;
GPIOA-›CRL&=~GPIO_CRL_CNF4;//enx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE4;//max
//GPIOA-›ODR&=~GPIO_ODR_ODR4;
GPIOA-›ODR|=GPIO_ODR_ODR4;
GPIOA-›CRL&=~GPIO_CRL_CNF5;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE5;//max
GPIOA-›ODR&=~GPIO_ODR_ODR5;
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sdata,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;
GPIOA-›ODR&=~GPIO_ODR_ODR2;//resetx=0
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›ODR&=~GPIO_ODR_ODR1;//enbl=0
for (i=0;i‹100;i++);
GPIOA-›ODR|=GPIO_ODR_ODR2;//resetx=1
WR(0x15,0xA000);
WR(0x00,0x7FFA);
WR(0x0F,B[0]);
WR(0x10,B[1]);
WR(0x11,B[2]);
WR(0x15,0xE000);
while (1);
}
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:50.
|
|