21.08.2012, 17:30
|
|
Частый гость
Регистрация: 24.08.2010
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
.....При такой формулировке вопроса, появляется встречный вопрос - сколько вы готовы за это заплатить?
Немец назначил мне цену 1 дисплей LS020, пока искал ему и нашел он исчез.
Во вторых если хочешь поднять свой рейтинг в глазах у ребят у кого есть еще LS020 и переориентировать их на СТМ32 что вообще-то может стоит
Во третьих сам пытался это сделать имея опыт с STM32F10x с LS020 у меня не получилось.
С этого не сделать коммерческого проекта ввиду практического отсутствия LS020
|
|
|
|
22.08.2012, 16:08
|
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Вопрос, наверно, не совсем по адресу, но все же!
имеется функция для отправки данных на дисплей ЖКИ:
Цитата:
|
void lcd_out(char * txt)
{
while(*txt) {
lcd_send_data(*txt);
txt++;
}
}
void lcd_send_data(uint8_t byte_com)
{
LSD_delay_ms(100);
LCD_PORT-›BSRRH |= (LCD_DB4|LCD_DB5|LCD_DB6|LCD_DB7);
// RS=1 RW=0
LCD_CONTROL-›BSRRH |= LCD_RW;
LCD_CONTROL-›ODR |= LCD_RS;
// отправка старшего полубайта
if (byte_com & 0x10) {
LCD_PORT-›ODR |=LCD_DB4;
}
if (byte_com & 0x20) {
LCD_PORT-›ODR |=LCD_DB5;
}
if (byte_com & 0x40) {
LCD_PORT-›ODR |=LCD_DB6;
}
if (byte_com & 0x80) {
LCD_PORT-›ODR |=LCD_DB7;
}
lcd_E_ON();
LCD_PORT-›BSRRH |= (LCD_DB4|LCD_DB5|LCD_DB6|LCD_DB7);
// отправка младшего полубайта
if (byte_com & 0x01) {
LCD_PORT-›ODR |=LCD_DB4;
}
if (byte_com & 0x02) {
LCD_PORT-›ODR |=LCD_DB5;
}
if (byte_com & 0x04) {
LCD_PORT-›ODR |=LCD_DB6;
}
if (byte_com & 0x0 {
LCD_PORT-›ODR |=LCD_DB7;
}
lcd_E_ON();
}
|
т.е для отправки любой фразы, достаточно написать void lcd_out("любая фраза");
вопрос: как сделать так что бы можно было отправить значение любой переменной!
т.е к примеру, есть переменная "value" равная 1054, тк вот как отправить её на дисплей,используя void lcd_out(value)?
разумеется можно написать отдельную функцию, которая будет считать сотни десятки единицы и по отдельности отсылать!
но нельзя ли какниб отправить с использованием уже имеющейся функции, может как-то экранировать переменную можно, типа void lcd_out("/value")?
|
|
|
|
22.08.2012, 16:12
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
sosedi, Волшебное слово ITOA .
Вот из загашника ...
Код:
|
//////////////////////////////////////////////////////////////////////////////
// ITOA
///////////////////////////////////////////////////////////////////////////////
/*
** The following two functions together make up an itoa()
** implementation. Function i2a() is a 'private' function
** called by the public itoa() function.
**
** itoa() takes three arguments:
** 1) the integer to be converted,
** 2) a pointer to a character conversion buffer,
** 3) the radix for the conversion
** which can range between 2 and 36 inclusive
** range errors on the radix default it to base10
** Code from http://groups.google.com/group/comp.lang.c/msg/66552ef8b04fe1ab?pli=1
*/
static char *i2a(unsigned i, char *a, unsigned r)
{
if (i / r › 0)
a = i2a(i / r, a, r);
*a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
return a + 1;
}
char *itoa(int i, char *a, int r)
{
if ((r ‹ 2) || (r › 36))
r = 10;
if (i ‹ 0) {
*a = '-';
*i2a(-(unsigned) i, a + 1, r) = 0;
} else
*i2a(i, a, r) = 0;
return a;
} |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 22.08.2012 в 16:15.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
22.08.2012, 16:47
|
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dosikus
|
sosedi, Волшебное слово ITOA .
Вот из загашника ...
Код:
|
//////////////////////////////////////////////////////////////////////////////
// ITOA
///////////////////////////////////////////////////////////////////////////////
/*
** The following two functions together make up an itoa()
** implementation. Function i2a() is a 'private' function
** called by the public itoa() function.
**
** itoa() takes three arguments:
** 1) the integer to be converted,
** 2) a pointer to a character conversion buffer,
** 3) the radix for the conversion
** which can range between 2 and 36 inclusive
** range errors on the radix default it to base10
** Code from http://groups.google.com/group/comp.lang.c/msg/66552ef8b04fe1ab?pli=1
*/
static char *i2a(unsigned i, char *a, unsigned r)
{
if (i / r › 0)
a = i2a(i / r, a, r);
*a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
return a + 1;
}
char *itoa(int i, char *a, int r)
{
if ((r ‹ 2) || (r › 36))
r = 10;
if (i ‹ 0) {
*a = '-';
*i2a(-(unsigned) i, a + 1, r) = 0;
} else
*i2a(i, a, r) = 0;
return a;
} |
|
если честно, то я мало понял из этого кода(по-этому повторюсь,
тк а можно как-то экранировать мою переменную и скормить её массиву?
|
|
|
|
22.08.2012, 18:07
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
sosedi или чуть более универсально:
void lcd_out (char * txt)
{
while(*txt) lcd_send_data(*txt++);
}
// sample
char S[16];
sprintf(S, "%i", Value);
lcd_out(S);
|
|
|
|
22.08.2012, 18:18
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от sosedi
|
если честно, то я мало понял из этого кода(по-этому повторюсь,
тк а можно как-то экранировать мою переменную и скормить её массиву?
|
Собственно , что бы не тратить попусту ресурсы с "помощью" sprintf ,
Смысл такой - ITOA преобразует целое в строку символов , заполняя ими буфер.
Указатель на этот буфер вы и скармливаете своей функции вывода .
Как использовать - вывод значения переменной с основанием 10:
Код:
|
char stringa[8];
...
itoa(Ваша переменная,stringa,10);
lcd_out(stringa); |
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
22.08.2012, 18:42
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
dosikus мы все еще про STM32 говорим, где мегабайтные флеши и сотни мипс по скорости? и GUI это не то место где нужна суперскорость.
|
|
|
|
22.08.2012, 19:02
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Hives, Ну,ну ...
А sosedi из любопытства на CMSIS переводит все ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 22.08.2012 в 19:06.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
22.08.2012, 21:43
|
|
Вид на жительство
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Sl_
|
Mike121234 Откуда Вы знаете длину посылки? Из первого принятого байта?
Вашу задачу я бы решил используя прерывание по каждому принятому байту, те вообще без DMA.
Ну или как компромис минимальнуя длину 4 байта через DMA, затем запретив его через прерывания UARTa - но это уже как-то коряво.
|
Да это все понятно, так и делалось.
История вопроса....
На семинаре спросил про FIFO UART у STM
- 1 БАЙТ !
- У филипса 8 байт...
- А зачем Вам FIFO, если есть DMA?
Вот я тогда итак и не понял как DMA может заменить FIFO, НО судя по уверенному ответу понял, что это надо знать...
|
|
|
|
23.08.2012, 11:28
|
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dosikus
|
Hives, Ну,ну ...
А sosedi из любопытства на CMSIS переводит все ...
|
Спасибо большое, за эту быструю и могучую функцию)
Не могли бы вы помочи мне разобраться в вашем коде, а именно:
Код:
|
a = i2a(i / r, a, r);
*a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
return a + 1; |
я то понимаю , в общих чертах, что тут происходит, но хотелось бы разобрать все!
И вот еще вопрос!!!
почему в прерываниях я не могу работать с дисплеем, а точнее зависание происходит при вызове функций задержки, в которых используются другие прерывания!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:22.
|
|