25.04.2013, 10:34
|
#741
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Да есть тут один хедер под задержки. Правда, при 16МГц реальных пришлось выставить 22МГц. Иначе врет прилично. Но вот как-то так оно и работает:
Код:
|
#ifndef DELAY_H
#define DELAY_H
#define F_CPU 22000000
#include "stm8s.h"
#ifndef F_CPU
#error "F_CPU not defined!"
#endif
#define US(x) \
(unsigned int)((((x*(F_CPU/1000000.0))‹=6)*6 + ((x*(F_CPU/1000000.0))›6)*(x*(F_CPU/1000000.0)) - 2)/4)
#define MS_SHORT_MAX ((262140000UL/F_CPU))
#pragma inline //=forced
void delay(uint16_t __cycle_count)
{
__asm("loop: \n"
"decw x \n"
"jrne loop \n"
" nop \n");
}
#define delay_us(x) delay(US(x))
#pragma inline =forced
void delay_ms(uint16_t ms)
{
if(ms ‹ MS_SHORT_MAX)
{
delay(US((uint16_t)ms*1000));
}
else
{
while(ms--) delay(US(999));
}
}
#endif // #ifndef DELAY_H |
|
|
|
|
25.04.2013, 10:43
|
#742
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
На коротких и "точных" задержках nop'ами, хорошо бы еще прерывания запрещать, или они будут, ну, оочень разными, от случая к случаю.
Кстати - может потому и пришлось писать 22МГц вместо 16-ти?
__________________
There's always more than one way to skin a cat.
|
|
|
|
25.04.2013, 11:00
|
#743
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
При разрешенных прерываниях 1-Wire не работает вообще.
|
|
|
|
25.04.2013, 11:22
|
#744
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
Я не про 1W, а про всё вообще, или речь только о 22МГц-ах?
__________________
There's always more than one way to skin a cat.
|
|
|
|
25.04.2013, 11:24
|
#745
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Не могу сказать. Запускал 1-Wire, отлаживал по USBee. В других случаях мне что 10мкс, что 15 разницы не было.
|
|
|
|
25.04.2013, 11:55
|
#746
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от Easyrider83
|
Да есть тут один хедер под задержки.
|
Ну давай теперь один и тот хэдер а все страницы копипастить ...
__________________
Осторожно , злой кот
|
|
|
|
25.04.2013, 12:12
|
#747
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
По таймеру немного лучшее получается:
Код:
|
// Настройка
TIM4_PSCR=0x04; // Пределитель на 2^4=16, 16000000/16 = 1000000 Hz
TIM4_CR1_bit.OPM=1; // Остановка счетчика по переполнению
......
// Код
TIM4_CNTR=256-90; // 90 us
TIM4_CR1_bit.CEN=1; // Разрешение счета
while(TIM4_CR1_bit.CEN); // Ожидание остановки счетчика |
|
|
|
|
26.04.2013, 14:46
|
#748
|
Прописка
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Новая проблема . Для отладки работы программы нужно вывести в UART значение переменных выводить нужно в таком формате
printf("type =%.2X%.2X\r\n",buf[12],buf[13]);
у меня самописная функция printf
Код:
|
void printf(char *str)
{
char *si = str;
while (*si)
{
UART2_DR = (unsigned char) *si;
while (UART2_SR_TXE == 0);
ch++;
}
} |
Приведенную вверху строку мой printf отправить не может, как быть? Где взять функцию printf чтобы она могла обрабатывать строку приведенную выше и отправлять в UART ? Может у кого есть исходник?
|
|
|
|
26.04.2013, 15:30
|
#749
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: FAQ по STM8
Написать свой аналог ITOA с основанием 16 .
Заполнять строку буфер и ее уже выплевывать.
Только не понятно про спецификатор точность , если я правильно понял
uint8_t buf[] ?
__________________
Осторожно , злой кот
|
|
|
|
26.04.2013, 15:43
|
#750
|
Прописка
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от dosikus
|
Написать свой аналог ITOA с основанием 16 .
|
Жаль , я думал что уже есть готовое решение.
Мне нужно передавать в UART переменную типа int . С одно байтовой я бы не парился.
Интересно а есть исходник на функцию printf которая из библиотеки stdio ?На базе её сделать только в качестве потока указать UART.
И ещё вопрос но уже по SPI в STM8S, я уже спрашивал, но никто не ответил, пины для SPI нужно конфигурировать на вход и выход или они уже по умолчанию сконфигурированы как нужно при запуске SPI?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:55.
|
|