ftp27

Stm8L И Uart

4 сообщения в этой теме

ftp27    2

Пытаюсь завести UART на сабжевом микроконтроллере. В принципе таки все есть, но UART упорно молчит при передаче и не выходит на прерывание при приеме. Чутье подсказывает, что я просто напросто не так подал тактирование на модуль USART, но уже раз 10 все перепроверил. Все именно так.

Вот код:

#include "iostm8l152c6.h"
int main ( void )
{
PC_DDR_bit.DDR3 = 1;
PC_CR1_bit.C13 = 1;
PC_CR2_bit.C23 = 0;
PC_DDR_bit.DDR2 = 0;
PC_CR1_bit.C12 = 1;
PC_CR2_bit.C22 = 1;

//UART init
CLK_PCKENR1_bit.PCKEN15 = 1;

USART1_CR1 = 0;
USART1_CR3 = 0;
USART1_CR4 = 0;
USART1_CR5 = 0;

USART1_BRR2 = 0x03;
USART1_BRR1 = 0x68;

USART1_CR2_bit.RIEN = 1;
USART1_CR2_bit.REN = 1;
USART1_CR2_bit.TEN = 1;

asm("RIM");

while (1) { //Loop
while(!(USART1_SR_bit.TC));
USART1_DR = '!';
}

return 0;
}
#pragma vector=USART_R_OR_vector
__interrupt void USART_RXNE(void)
{
while(!(USART1_SR_bit.TC));
USART1_DR = '?';
}

По поводу железа... Передачу (TX со стороны STM) я жду на лапе PC3, а прием (RX) на PC2

Изменено пользователем ftp27

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
ftp27    2

Да. Ошибка была моя. Не настроил проект для прошивки по ST-Link. Но возникла другая трабла. Если верить длине бита взятых с осциллографа и формуле подсчета BRR из даташита (Скорость = Генератор/BBR), то частота тактирования USART - 32Мгц, что просто не может быть (16Мгц же). К тому же в пакете не отсылается последний бит. При передаче передается 7 бит вместо 8.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

Решение:

настройка резонатора

CLK_CKDIVR = 0;
CLK_ICKCR_bit.HSION = 1;

BBR

USART1_BRR2 = 0x03;
USART1_BRR1 = 0x68;

Пиздатые тут у вас помошники....

  • Не одобряю 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: Atreides
      Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
    • Автор: dim3740
      Читается порт UART на микроконтроллере Atmega. Применяю типовой алгоритм, но аппаратно вижу ошибки. Что неверное, или отчего они могут быть?
       
      unsigned char rx_buffer[128]; //накопительный буфер unsigned char indexW; // индекс при наполнении накопительного буфера unsigned char Count; // счетчик накопительного буфера unsigned char indexR; // индекс при опорожнении накопительного буфера int Max; // максимум до переполнения char tempMessage; // временная переменная int main(void) {    Max=100; // пробовал разные    while(1)     {         _delay_us(40); // пробовал от 10 мкс до мс                          if (Count > 0)          {             tempMessage=rx_bufferR[indexR];                                        MesComplite(tempMessage); //тут анализ каждого считанного байта. Это занимает время                                          //поэтому и нужен буфер                          indexR++;                            if (indexR>=Max)  indexR=0;  //Значение Max одинаковое для чтения и записи. Может разные проба?                          cli();  // для надежности запрет прерывания             Count--;             sei(); //разрешение                          if (Count>=Max)  Count=0;                  }              } } ISR(USART_RXC_vect)   {     if (UCSRA & (1<<7))        {                  rx_buffer[indexW]=UDR;                  indexW++;                    if (indexW>=Max)  indexW=0;                   Count++;                  if (Count>Max)  Count=0;           } }
      1. Задержка нужна в цикле whole? У меня при нуле еще больше ошибок(((
      2. Размеры 128 и 100 методом подбора?
      3. Инкременты ++ ставить после команды?
      4. запреты прерывания нужны?
      5. If делаю на "равенство и больше". Верно?
      6. Какие есть иные методы повышения надежности, кроме повторной отправки при ошибке?
    • Автор: oops13
      Простите, продублирую свой пост в новой теме:
      Форумчане, коллеги! Подскажите, пожалуйста. CoIDE выдает вот такую ошибку при записи во флешпамять:  Error: Connect failed, check config and cable connection. Со шнуром USB всё в порядке, ST-Link Utility установил. Но в диспетчере устройств драйвер STM32 почему-то именно в разделе дисковых устройствах отображается(в контроллерах USB его нет). На отладочной плате Discovery горит Красный светодиод. Настройки дебаггера в CoIDE прилагаю. Спасибо.

    • Автор: Дмитрий Кузьмичёв
      Доброго времени суток!!! Я столкнулся с тем, что не работает UART и не реагирует на AT-команды. Пробовал с 2-мя переходниками: CH340 и FT232RL, тот, что в Arduino. Пробовал и менять контакты RX-TX местами, и скорость менял (должно быть 9600 бод) - терминал молчит от слова совсем. CH340 просто светит своим индикатором приема, а FT232 моргнет при включении и все. Должно выводиться в терминале при включении ON, но не выводится ничего и никак не реагирует. Проверял и обвязкой, и упрощенным подключением (4 провода - 2 питания и 2 UART), и напряжение то 3.3 делал, то 3.7, то питал с аккумулятора - молчание. Подумал, что UART нагнулся из-за моих кривых рук - махнулся с другом на свежую, проверить UART, но результат тот же, полагаю, что в моем даже и не сдох. А сам модуль работает, не считая злосчатного UART. Так в чем может быть проблема? 
    • Автор: X-Fear
      Здравствуйте, на днях собрал ubs-usart на attiny2313 на макетной плате, всё работало. Припаял к плате - не работает. В диспетчере задач показывается, как Неизвестное устройство.  В чём может быть проблема, контакты проверил тестером в режиме прозвонки, вроде не коротит ничего. 




  • Сообщения

    • Наиболее, как мне кажется концентрированная мысль. Многие путают линейную скорость электрона со скоростью дрейфа электронов. Электроны метаются туда-сюда с умопомрачительными скоростями в любом случае (T>0). Это так называемые тепловые колебания. Они тока не создают. Энергия тепловых колебаний описана формулой  mV2/2 = 3/2KT К постоянная Больцмана, m - масса электрона, Т - температура в Кельвинах. Отсюда, кто желает может вычислить линейную скорость электрона. Величина большая получается, да ещё зависит от температуры металла. Напомню, температура - это макроскопичекий параметр, мера тепловой энергии газа. Но это не то же самое, что скорость движения зарядов. Без внешнего поля эти метания тока не создают (только тепловой шум), потому, что среднее число пересекших условное сечение проводника электронов туда и обратно равно нулю. Под действием внешнего поля, скорость (усредненная по объему) зарядов составляет всего несколько мм в секунду. В металлах атомы в узлах кристаллической решетки тоже колеблются, в зависимости от температуры, и своими колебаниями мешают току электронов. Чем выше температура, тем сильнее мешают. Поэтому, сопротивление металлов растёт с температурой. Правильно, электроны в металлах не привязаны к атомам, а являются общими для всего металлического кристалла. Если говорят об отрыве электрона от ядра, то это означает, что необходимо преодолеть некоторый потенциальный энергетический барьер, то есть , запрещённую зону. Это свойственно полупроводникам. И изоляторам тоже (просто ЗЗ огромная).
    • @войтов картинка увеличивается и все прекрасно видно. VIPer12A @evgomur См. даташит. VIPER12A.pdf
    • Не выдумки.  Да ты и сам знаешь.  Всё хорошо, что не Квод. Даже если Квод сделать хотя бы Людвигом,  это уже шаг вперёд. 
    • Смотря до скольки греть спираль. Если докрасна, то сгореть может, надо уже асбест или керамику.
      Старые, работавшие паяльники дербанить мало смысла - снять и повторно использовать изолятор вряд ли получится. А вот новую намотку поискать можно, мне попадались.
    • Доброе время суток всем. Не хотел плодить отдельную тему решил тут написать. Начитавшись форум,  разных статей о ламповых усилителей, где рассказывалось о прекрасном звучании лампы, решил собрать ламповый усилитель для наушников и наслаждаться тем самым прекрасным ламповым звуком. Была выбрана схема SRPP усилителя, так как очень популярна, многие ее делали и все очень были довольны звуком. Усилитель был собран и заработал сразу. Сперва установил лампы как на схеме 6Н23П наушники использовал на 64 Ом так как других высокоомных нету, да знаю что этот усилитель будет работать нормально только на высокоомную нагрузку. Но усилитель вполне нормально работал и на 64 Ом без слышимых искажений в звуке, источник сигнала брался напрямую от звуковой карты компьютера. Звук не понравился, нет баса, как буто обрезная АЧХ,  100Гц - 8кГц, нет детализации, излишки у высоких частот, уши очень сильно режет, тяжело слушать, звук как от патифона на виниле годов 50, от самой звуковушке звук в разы лучше, и детализация, средние частоты, слышен мягкий напористый бас. Купил партию ламп 6н1п, так как прочел на форумах что данная лампа получше будет по звуку, а и она была сделана именно для звукового тракта. При использовании данной лампы, звук изменился в лучшую сторону,  стал боле мягче, появился бас, но все равно не дотягивая до глубокого, верха уже не так режут уши, но звук от самой звуковушке лучше в разы, и это слышится с первых сикунд. Пробовал подбирать катодные резисторы, выставлял точное напряжение половины питающего на аноде нижней лампы, увеличивал емкость выходных конденсаторов, особых улучшений не дало. Последовательно к наушникам подключал резистор 600 Ом, для увеличения сопротивления на выходе лампы, звук также не изменялся ни в лучшую ни в худшую сторону. Достать высокоомные наушники проблематично, стоят они очень дорого. На некотором форуме предлагалось для низкоомных наушников применить выходной трансформатор, что было успешно сделано, трансформатор был выбран сетевой 220в 18В. После трансформатора звук стал в разы громче на наушниках, но качество звука не изменилось. Далее нашол другую схему именно для 32Ом наушников с трансформаторным выходом. Схема заработала сразу, трансформатор использовал от телевизора ТВЗ, звук еще хуже нежели от первой схемы, очень много высоких частот, баса вообще нет. Сделал самодельный выходной трансформатор из сетевого путем подложки бумаги между соединением магнитопровода, для создание зазора, что предотвращает насыщение. Результат оказался такой же как и з ТВЗ. Далее вместо трансформатора установил резистор в цепь анода 1-3кОм, и уже через конденсатор подключил трансформатор, что переделанный так и ТВЗ, звук стал лучше, примерно как первая схема. До ламповых усилителей делал простой усилитель на одном полевом транзисторе который работал в А классе, схема распространенная очень в интернете, звук поразил сразу,  и это ощущается с первых секунд. Вообще хотелось бы услышать Ваше мнение по поводу данных схем и вообще лампового звука, может я действительно чего то не того хочу от лампового усилителя и он так и должен звучать как какое нит ретро из далеких годов.    
    • Фото реле РЭС9. (фото кучей и вид контактов).