Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Программирование STM8

Вт июл 04, 2017 17:59:31

вариант:
Код:
unsigned char a;
data->byte_index++;
a =  data->byte_index;
if( a >= data->bytes ) data->state = encoding_state_tx_busy_lb;

почитать тут:
http://microsin.ru/content/view/1172/44/
https://electronix.ru/forum/lofiversion ... 13226.html

Re: Программирование STM8

Вт июл 04, 2017 18:21:28

Спасибо, значит описанный мной способ правильный

вопрос еще
как правильно сбрасывать счетчик TIM4_CNTR ?
достаточно ли для этого присвоить регистру нулевое значение или нужно еще как то перезапускать таймер?

Re: Программирование STM8

Вт авг 01, 2017 13:28:57

Добрые коты помогите!!
Не могу разобраться, не работает SPI на stm8l051f3
Инициализация проходит, порты работают. А SPI не хочет,
в режиме дебага в регистр DR нечего не шлется, соответственно никаких флагов не выставляется

Пишу в ИАР
Моя инициализация
Спойлер/* Includes ----------*/
#include "stm8l15x.h"
#include "peripheral.h"

/* Private functions ----------*/
uint8_t SPI_ReadByte(uint8_t);

void main(void){
CLK_Init();
SPI_Init_();
Leds_Init();

uint8_t i = 0;

/* Infinite loop */
while (1) {
for (i=0; i<10; ++i){
SPI_ReadByte(i);
}
}
}
uint8_t SPI_ReadByte(uint8_t data){
/* Ждём очистки регистра DR */
while ((SPI1->SR & (uint8_t)SPI_FLAG_TXE) == RESET) { ; }

/* Послать байт */
SPI_SendData(SPI1, data);

/* Ждём приёма байта */
//while ((SPI1->SR & (uint8_t)SPI_FLAG_RXNE) == RESET) { ; }

/* Возвратить принятый байт */
return (uint8_t)SPI1->DR;
}

#ifdef USE_FULL_ASSERT
void assert_failed(u8* file, u32 line) { while (1) {}; };
#endif

Спойлер#include "peripheral.h"

//******************************************************************************
//---------- CLK ----------
//******************************************************************************
void CLK_Init(void) {
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK->CKDIVR = 0x00; // Fcpu = 16MHz
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
CLK_SYSCLKSourceSwitchCmd(ENABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);
}
//******************************************************************************
//---------- Leds ----------
//******************************************************************************
void Leds_Init(void) {
GPIO_Init(PORT_Red_Led, PIN_Red_Led, GPIO_Mode_Out_PP_Low_Fast);
}
//******************************************************************************
//---------- SPI initialization ----------
//******************************************************************************
void SPI_Init_(void) {
GPIO_Init (PORT_NSS, PIN_NSS, GPIO_Mode_Out_PP_High_Fast); // конфигурируем CS (SS)
// GPIO_Init (PORT_SPI, PIN_CE, GPIO_Mode_Out_PP_High_Fast); // конфигурируем CE
GPIO_Init (PORT_SPI, PIN_SCK, GPIO_Mode_Out_PP_High_Fast); // конфигурируем CLK
GPIO_Init (PORT_SPI, PIN_MOSI, GPIO_Mode_Out_PP_High_Fast); // конфигурируем MOSI
GPIO_Init (PORT_SPI, PIN_MISO, GPIO_Mode_In_FL_No_IT); // конфигурируем MISO
// GPIO_Init (PORT_SPI, PIN_IRQ, GPIO_Mode_In_FL_No_IT); // вывод прерывания радиомодуля

SPI_DeInit(SPI1);
SPI_CalculateCRCCmd(SPI1, DISABLE);
SPI_Init
(
SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_256, SPI_Mode_Master,
SPI_CPOL_Low, SPI_CPHA_1Edge,
SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x00
);
SPI_Cmd(SPI1, ENABLE);
}

Спойлер#ifndef _peripheral_
#define _peripheral_

#include "stm8l15x.h"

//******************************************************************************
//---------- Leds ----------
//******************************************************************************
#define PORT_Red_Led GPIOC
#define PIN_Red_Led GPIO_Pin_6

//***************************************************************************//
//---------- defines START ----------//
//***************************************************************************//
#define PIN_NSS GPIO_Pin_2 // connected to CSN
#define PORT_NSS GPIOB // NSS port
#define PIN_SCK GPIO_Pin_3
#define PIN_MOSI GPIO_Pin_4
#define PIN_MISO GPIO_Pin_5
#define PORT_SPI GPIOB // SPI port

//***************************************************************************//
//---------- function defines ----------//
//***************************************************************************//
void SPI_Init_(void);
void Leds_Init(void);
void CLK_Init(void);

#endif

Или ткните рабочим кодом, а лучше проэктом.
Просто в симуляторе в регистр данные идут, а в железе все молчит. Может забыл что то еще инициализировать.

Re: Программирование STM8

Чт авг 03, 2017 10:48:51

правильно понимаю, что такой адаптер https://ru.aliexpress.com/item/TSSOP28- ... st=ae803_1
можно применить для беспаявной отладки и прошивки stm8 в корпусах TSSOP20?
было бы круто

Re: Программирование STM8

Вт авг 08, 2017 06:29:52

А что здесь крутого?
Что тебе мешает отлаживать запаянный контроллер?
По моему SWIM полностью его debag-ит и прошивает в плате.

Re: Программирование STM8

Вт авг 08, 2017 09:23:15

с tiny13 некоторые простые устройства требующие простоты, а иногда коимпактности отлаживаю используя похожий адаптер и потом прошитую микросхему впаиваю
не нужно место на плате под ISP, его не надо ни разводить ни паять ни выделять место
вот думаю для себя о том же с stm8s. особенно актуально если надо сделать серию одинаковых устройств
конечно все ИМХО, не всем надо

Re: Программирование STM8

Ср авг 16, 2017 16:58:35

на худой конец можно на время отладки подпаять провода к программатору и отлаживать себе спокойно.

Re: Программирование STM8

Ср сен 06, 2017 09:55:34

подскажите, как настроить IAR 3.10 на то, чтобы при компиляции выводиласт статистика по занятым ресурсам?
в 2.20 выводилось по умолчанию, в 3.10 по умолчанию нет ничего

Re: Программирование STM8

Ср сен 06, 2017 10:29:32

в окошке вывода Build нажать правую кнопку мышы -> птичка All

Re: Программирование STM8

Ср сен 06, 2017 10:46:04

спасибо! заработало

Re: Программирование STM8

Чт сен 07, 2017 11:46:01

есть ли какие то опции компилятора повысить стандарт С++?
в частности хотелось бы, чтобы принимался nullptr

Re: Программирование STM8

Сб сен 09, 2017 12:12:44

что может быть причиной того, что МК зависает внутри вектора прерываний ADC?

переписываю библиотеки на С++
всю инициализацию и все настройки регистров беру из рабочего варианта на Си
но при активации ADC судя по отладчику МК бесконечно отрабатывает только прерывания ADC, в основную программу не возвращается
флаги сбрасываю

внутри обработчика иедт вызов функции по адресу и если этот вызов закоментарить, то зависания прекращаются
при этом по отладке сам выхов отрабатывает так как надо, МК не виснат полностью, а хацикливается на векторе прерываний ADC

причем точно такой же подход - вызов функции по адресу применен и для векторов по таймерам, там такой проблемы нет
пересмотрел все и настройки регистров и пошагов весь код который отрабатывает по вектору - не могу понять причины

как то пагубно влияет сам факт вызова по адресу
потому, что даже если комментирую все строки кода которые вызываются то все равно циклится
как только убераю вызов по адресу цикл прекращается

Re: Программирование STM8

Сб сен 09, 2017 13:16:16

может переполнение стека?

Re: Программирование STM8

Сб сен 09, 2017 13:18:18

переполнение стека?

с чего оно возникнет?
опять же если бы было переполнение через какое то время МК просто ушел бы в никуда
а он упорно отрабатываепт вектор и весь мой код внутри вектора

Re: Программирование STM8

Сб сен 09, 2017 13:22:10

с чего оно возникнет?

от недостаточного размера стека
а он упорно отрабатываепт вектор и весь мой код внутри вектора
ну так адрес возврата затертый

Re: Программирование STM8

Сб сен 09, 2017 13:34:38

ну так адрес возврата затертый


если бы было так то два прерывания по таймерам бы тоже не работали, разве нет?
два прерывания работают а это одно даже одно не работает
сомнительно что это стек как то может быть причастен

Re: Программирование STM8

Сб сен 09, 2017 13:50:54

ну stm8 я знаю плохо. потому чем смог тем попытался помочь

Re: Программирование STM8

Сб сен 09, 2017 14:21:20

axillent писал(а):внутри обработчика иедт вызов функции по адресу и если этот вызов закоментарить, то зависания прекращаются
Возможно эта функция выполняется так долго, что АЦП успевает сделать следующее преобразование. Если это так, то можно уменьшить приоритет прерывания или выключать АЦП пока находишься в обработчике прерывания, сбрасывать флаг перед выходом из прерывания.

Re: Программирование STM8

Сб сен 09, 2017 17:46:07

Там мизер кода, тем более как я выше написал влияет сам вызов даже если весь остальнойк од закомментировать
В программе которую переписываю кода больше и все работает
Явно какая то другая причина, что то упускаю

Re: Программирование STM8

Сб сен 09, 2017 17:53:27

Наверное без кода тогда Вам не помочь. Ищите что вносит закоментная функция. Вы ее по адресу вызываете, возможно RusikOk в правильном направлении наколку дал.
Ответить