void spisendbuf(uint8_t *massiv,uint8_t byte) { uint8_t i; uint8_t test; for(i=0;i<byte;i++) { test=*massiv[i];/* здесь в отладчике вижу что в указателе *massiv[0] лежит адрес переменной adress например, а по адресу adress лежит нужное значение 0x01 а в переменную test копируется старший байт адреса указателя *massiv(смотрю в отладчике STVD), как сделать так, чтобы в переменную test копировалась переменная adress? */ test=massiv[i];// так компилятор ругается } }
если вам нужно получить указатель на массив, но объявите test как указатель: uint8_t * test; после чего присваивайте: test=massive; доступ к элементам массива через: *(test+i), где i- номер элемента массива.
void NRF24_WriteReg(uint8_t addr, uint8_t dt) { addr |= W_REGISTER;//включим бит записи в адрес CS_ON; HAL_SPI_Transmit(&addr,1);//отправим адрес в шину HAL_SPI_Transmit(&dt,1);//отправим данные в шину CS_OFF; } void HAL_SPI_Transmit(uint8_t * pData1, uint8_t Size) { uint8_t i; uint8_t test;
test = pData1[i];//test=0x03 test = *pData1;//test=0x03 for(i = 0; i < Size; i++) { while (SPI_GetFlagStatus(SPI_FLAG_TXE)== RESET); SPI_SendData(* pData1); //buf = pData1[0]; pData1++; while (SPI_GetFlagStatus(SPI_FLAG_BSY)== SET); while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET); //buf=SPI_ReceiveData(); } }
Вопрос, почему test = pData1[i] равно 0х03, хотя указатель pData1[i] указывает на значение 0x20? Как разыменовывать указатель чтобы в нем было 0x20? Во вложении скрин космика с ошибкой. Компилировалось все без ошибок
Вопрос, почему test = pData1[i] равно 0х03, хотя указатель pData1[i] указывает на значение 0x20?
Код в сообщении и на картинке отличается. В сообщении у вас переменная i не проинициализирована перед первым использованием. Что вы еще там исправили и где, выяснить невозможно.
Проверил в IAR этот же код работает как надо, проблема в Cosmic с указателями. Причем значение по указателю в космике записывается нормально *pData1 = test, а считывается неправильно test = *pData1
Я как-то тоже по этом поводу сначала возбудился, но потом не стал заострять. Раз вопрос все-таки возник, то присоединяюсь к нему. Очень интересно, откуда здесь хал.
Насчет проверки, как работает тот или иной неспецифический для МК код, могу посоветовать пользоваться онлайн-компиляторами. Нужно просто в гулге вбить "Online C Compiler" и выбрать подходящий. Там же можно сохранить получившийся после пробных прогонов код и использовать ссылку на него, если он в последующем окажется зачем-то нужен.
dosikus спасибо большое! Объявил volatile и все заработало ура
Использовал для stm32 куб и хал, был доволен как слон )) Нажал пару кнопок в кубе, пару строчек кода в Keil написал и все работает)) А тут куб для STM8 фигня, хала нету, указатели всякие надо уметь правильно применять и еще пришлось переделывать библиотеку с халом от STM32 на STM8, а чтобы не путаться в названиях функций оставил старые )))
Карма: 16
Рейтинг сообщений: 198
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 924 Откуда: от туда
Рейтинг сообщения:0
Прямо ситуация, когда пересел с автомобиля с коробкой - автоматом на механику: "А зачем здесь третья педаль?" Учитесь нормальные языки применять, а то останетесь неучами на всю жизнь.
Добрый день. Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает. Как реализованы аппаратные интерфейсы в stm8? В датащите указано следующее
Спойлер3.14.1 SPI The serial peripheral interface (SPI1) provides half/ full duplex synchronous serial communication with external devices. Maximum speed: 8 Mbit/s (fSYSCLK/2) both for master and slave Full duplex synchronous transfers Simplex synchronous transfers on 2 lines with a possible bidirectional data line Master or slave operation - selectable by hardware or software Hardware CRC calculation Slave/master selection input pin Note: SPI1 can be served by the DMA1 Controller. 3.14.2 I²C The I2C bus interface (I2C1) provides multi-master capability, and controls all I²C busspecific sequencing, protocol, arbitration and timing. Master, slave and multi-master capability Standard mode up to 100 kHz and fast speed modes up to 400 kHz 7-bit and 10-bit addressing modes SMBus 2.0 and PMBus support Hardware CRC calculation Note: I2C1 can be served by the DMA1 Controller. 3.14.3 USART The USART interface (USART1) allows full duplex, asynchronous communications with external devices requiring an industry standard NRZ asynchronous serial data format. It offers a very wide range of baud rates. 1 Mbit/s full duplex SCI SPI1 emulation High precision baud rate generator SmartCard emulation IrDA SIR encoder decoder Single wire half duplex mode Note: USART1 can be served by the DMA1 Controller.
Так вот, DMA1 Controller - это что за зверь такой? Можно ли использовать их все вместе, одновременно?
У DMA-контроллера обычно несколько каналов(потоков), привязанных к другим периферийным устройствам. Все их можно использовать одновременно. Сколько их и как привязаны даташит на конкретный чип скажет.
Добрый день. Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает.
Так вот, DMA1 Controller - это что за зверь такой?
В examples SPL для L-серии, есть самый простой и самый понятный пример использования DMA, когда DMA каналом связывается АЦП с одной стороны, и ШИМ контроллер с другой. С точки зрения программирования, такой DMA канал избавляет от необходимости использования АЦП прерывания с одной единственной операцией копирования: "ШИМ_значение = АЦП_значение;"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения