stm32f4 cmsis delay как сделать задержку для lcd

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32f4 cmsis delay как сделать задержку для lcd

Сообщение Eddy_Em »

а как сделать задержку таймером базовым?
Элементарно. Вот так можно сделать паузу примерно на SCREEN_PAUSE миллисекунд в конечном автомате:

Код: Выделить всё

case SCREEN_WAIT: // wait
            if(Tms - Tscr_last > SCREEN_PAUSE){
                //USB_send("Pause ends\n");
                ScrnState = SCREEN_UPDATENXT;
            }
А переменная Tms глобальная:

Код: Выделить всё

volatile uint32_t Tms = 0;
void sys_tick_handler(void){
    ++Tms;
}
И вообще, блокирующие паузы нельзя делать нигде, кроме инициализации. Особенно если эти паузы больше, чем на пару-тройку тактов ядра! А уж блокирующие паузы по полсекунды, как тупые абдуринщики делают, так вообще нонсенс!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: stm32f4 cmsis delay как сделать задержку для lcd

Сообщение Аlex »

Уже задержку в 3 такта ядра делают на КА, которые отожрут на порядок (а то и не один) больше времени.
Веселуха ... :)))
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: stm32f4 cmsis delay как сделать задержку для lcd

Сообщение Demiurg »

LCD какой? О каких задержках идёт речь? мкс, мс? Я с AVR работаю, потому приведу пример, как я делаю на них. К примеру, берём символьный дисплей. Самые большие задержки это после включения питания перед инициализацией дисплея. Кажется, 40 мс. И после команды Clear_display нужно выдержать 20 мс. Все остальное идёт в мкс. Также определённая задержка должна быть после каждой отправки команды или данных.
У меня реализовано так. Флаг готовности я не проверяю. То есть, дисплей работает только на запись. Пусть дисплей 20х4. Создаётся буфер 80 байтов. Алгоритм функции работы с дисплеем у меня сделан на конечном автомате. Сначала задержка 40 мс, инициализация дисплея. Затем, в зависимости от состояния автомата, каждую миллисекунду отправляется либо по индексу счётчика строки считывается адрес начала строки, либо отправляются данные из буфера строки. Задержки для работы с дисплеем на мкс сделаны тупо на nop-ах. АРМ пошустрее работают, так что делайте простые задержки. Типа delay_us.
Ответить

Вернуться в «ARM»