Например TDA7294

Форум РадиоКот • Просмотр темы - Программирование STM8
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср авг 27, 2025 19:53:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2563 ]     ... , , , 81, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 12:49:48 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пт апр 25, 2008 03:44:41
Сообщений: 54
Откуда: Воронеж
Рейтинг сообщения: 0
dosikus спасибо.

Как правильно сделать, например есть функция передачи по spi команды и адреса
Код:
spiwritereg(0x01, 0x02);

void spiwritereg (uint8_t adress,uint8_t data)
{адреса
spisendbuf(&adress,1);
spisendbuf(&data,1);
}

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];// так компилятор ругается
  }
 }


_________________
Всех убить! Всё отобрать!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 13:05:20 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Ругань компиля покажите.
Только что скомпилил оба варианта -никакой ругани.

Добавлено after 5 minutes 11 seconds:
Код:
void copy_array(uint8_t * buf)
 {  uint8_t test,i;
   
   
    for(i=0;i<8;i++)
    {
       test= *buf++;
      
    }
 }   
         
void copy_array2(uint8_t * buf)
 {  uint8_t test,i;
   
   
    for(i=0;i<8;i++)
    {
       test= buf[i];
      
    }

}

Код:
uint8_t my_array[20]={1,45,68,34,78,23,98,56,3,0,165};
copy_array(my_array);
      copy_array2(my_array);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 13:20:02 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Klepko писал(а):
test=*massiv[i];
Интересно, а как такая конструкция должна работать?

Добавлено after 13 minutes 29 seconds:
Код:
volatile uint8_t Test [3]=        {1,2,3};
volatile uint8_t Test_var;
//volatile uint8_t *Test_var;

...
...

Test_var=     *Test[0];



IAR послал меня с таким кодом.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 14:16:17 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 26
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 278
Рейтинг сообщения: 0
Как правильно сделать

если вам нужно получить указатель на массив, но объявите test как указатель: uint8_t * test;
после чего присваивайте: test=massive;
доступ к элементам массива через: *(test+i), где i- номер элемента массива.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 14:36:00 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
JackSmith, подучите немножко матчасть.

Цитата:
если вам нужно получить указатель на массив, но объявите test как указатель: uint8_t * test;
после чего присваивайте: test=massive;


Это уже происходит при передаче аргумента в функцию.


Цитата:
доступ к элементам массива через: *(test+i), где i- номер элемента массива.


Чем сие не угодило?
test= *buf+i;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 16:02:51 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6447
Рейтинг сообщения: 0
Указатели в Си можно использовать разными способами. Не нравится разыменование? Обращайтесь к данным по указателю, как к массиву:

Код:
void clear_array(uint8_t my_arr[]) {
  //
  for (int i = 0; i < 10; i++) {
    my_arr[i] = 0;
  }
}

// причем, можно и по-другому

void clear_array(uint8_t *my_arr) {
  //
  for (int i = 0; i < 10; i++) {
    my_arr[i] = 0;
  }
}



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 21:16:57 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пт апр 25, 2008 03:44:41
Сообщений: 54
Откуда: Воронеж
Рейтинг сообщения: 0
JackSmith писал(а):
Чем сие не угодило?
test= *buf+i

вот моя программа

Код:
NRF24_WriteReg(CONFIG, 0x0a);

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? Во вложении скрин космика с ошибкой.
Компилировалось все без ошибок
Вложение:
error.jpg [219.81 KiB]
Скачиваний: 578

_________________
Всех убить! Всё отобрать!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 03, 2018 21:56:57 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6447
Рейтинг сообщения: 0
Вопрос, почему test = pData1[i] равно 0х03, хотя указатель pData1[i] указывает на значение 0x20?

Код в сообщении и на картинке отличается. В сообщении у вас переменная i не проинициализирована перед первым использованием. Что вы еще там исправили и где, выяснить невозможно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вт сен 04, 2018 09:42:00 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пт апр 25, 2008 03:44:41
Сообщений: 54
Откуда: Воронеж
Рейтинг сообщения: 0
Проверил в IAR этот же код работает как надо, проблема в Cosmic с указателями. Причем значение по указателю в космике записывается нормально *pData1 = test, а считывается неправильно test = *pData1

_________________
Всех убить! Всё отобрать!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вт сен 04, 2018 10:19:18 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Нет ни каких проблем в Cosmic c указателями, объявите test как volatile.
И какой-такой HAL вы юзаете с STM8?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вт сен 04, 2018 10:21:10 
Говорящий с текстолитом

Карма: -9
Рейтинг сообщений: 175
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1538
Рейтинг сообщения: 0
Нет ни каких проблем в Cosmic c указателями, объявите test как volatile.

До этого автору нужно научиться инитить переменные перед использованием. Тогда может и Cosmic окажется не при чём.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вт сен 04, 2018 12:27:49 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6447
Рейтинг сообщения: 0
И какой-такой HAL вы юзаете с STM8?

Я как-то тоже по этом поводу сначала возбудился, но потом не стал заострять. Раз вопрос все-таки возник, то присоединяюсь к нему. Очень интересно, откуда здесь хал.

Насчет проверки, как работает тот или иной неспецифический для МК код, могу посоветовать пользоваться онлайн-компиляторами. Нужно просто в гулге вбить "Online C Compiler" и выбрать подходящий. Там же можно сохранить получившийся после пробных прогонов код и использовать ссылку на него, если он в последующем окажется зачем-то нужен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вт сен 04, 2018 22:05:36 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пт апр 25, 2008 03:44:41
Сообщений: 54
Откуда: Воронеж
Рейтинг сообщения: 0
dosikus спасибо большое! Объявил volatile и все заработало ура :)

Использовал для stm32 куб и хал, был доволен как слон )) Нажал пару кнопок в кубе, пару строчек кода в Keil написал и все работает)) А тут куб для STM8 фигня, хала нету, указатели всякие надо уметь правильно применять и еще пришлось переделывать библиотеку с халом от STM32 на STM8, а чтобы не путаться в названиях функций оставил старые )))

_________________
Всех убить! Всё отобрать!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Чт сен 06, 2018 11:26:21 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 198
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 924
Откуда: от туда
Рейтинг сообщения: 0
Прямо ситуация, когда пересел с автомобиля с коробкой - автоматом на механику: "А зачем здесь третья педаль?"
Учитесь нормальные языки применять, а то останетесь неучами на всю жизнь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Пн сен 17, 2018 21:10:30 
Собутыльник Кота
Аватар пользователя

Карма: 38
Рейтинг сообщений: 292
Зарегистрирован: Пт сен 07, 2018 20:20:02
Сообщений: 2594
Откуда: деревня в Тульской губернии
Рейтинг сообщения: 2
Медали: 1
Получил миской по аватаре (1)
Два часа назад вышел RC1 SDCC 3.8.0 https://sourceforge.net/projects/sdcc/
Бинарные сборки для Windows имеются

Из приятного, STM8S207S8T6C теперь успешно поддерживается, в связи с появлением в SDCC для STM8 24-х битной адресации (Large memory model).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб окт 13, 2018 07:52:31 
Родился

Зарегистрирован: Сб авг 18, 2018 21:03:23
Сообщений: 8
Рейтинг сообщения: 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 - это что за зверь такой?
Можно ли использовать их все вместе, одновременно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб окт 13, 2018 08:40:59 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 430
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2539
Рейтинг сообщения: 0
У DMA-контроллера обычно несколько каналов(потоков), привязанных к другим периферийным устройствам. Все их можно использовать одновременно. Сколько их и как привязаны даташит на конкретный чип скажет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Сб окт 13, 2018 12:31:05 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 179
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3379
Рейтинг сообщения: 0
Suigintou писал(а):
Так вот, DMA1 Controller - это что за зверь такой?
DMA в переводе на русский это ПДП, т. е. Прямой Доступ к Памяти. https://ru.wikipedia.org/wiki/Прямой_доступ_к_памяти
Здесь есть пример, правда для STM32. http://www.cyberforum.ru/blogs/204791/blog5169.html
Возможно после небольшой правки кода его удастся запустить на STM8.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс окт 14, 2018 09:18:52 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 26
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 278
Рейтинг сообщения: 0
Добрый день.
Есть у меня один весьма нубский вопрос, который, тем не менее меня все никак не отпускает.

Так вот, DMA1 Controller - это что за зверь такой?


В examples SPL для L-серии, есть самый простой и самый понятный пример использования DMA, когда DMA каналом связывается АЦП с одной стороны, и ШИМ контроллер с другой. С точки зрения программирования, такой DMA канал избавляет от необходимости использования АЦП прерывания с одной единственной операцией копирования: "ШИМ_значение = АЦП_значение;"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование STM8
СообщениеДобавлено: Вс ноя 11, 2018 20:05:38 
Потрогал лапой паяльник
Аватар пользователя

Карма: 19
Рейтинг сообщений: 8
Зарегистрирован: Чт окт 31, 2013 10:54:32
Сообщений: 384
Рейтинг сообщения: 0
Использую IAR. Хочу собрать uint32_t из 4 байтов. При сдвиге байта на 16, возникает следующая ошибка:
Код:
Warning[Pe063]: shift count is too large


Кто сталкивался с таким и как решить проблему.?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2563 ]     ... , , , 81, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y