Jump to content
Guest Victor

Не Работает Приём Usart

Recommended Posts

Guest Victor

Плата Sstm32f4discovery. Использую HAL. Стандартная инициализация не вырезана.

Тактирование настраивается так:

RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
// Enable Power Control clock
__PWR_CLK_ENABLE();
// The voltage scaling allows optimizing the power consumption when the
// device is clocked below the maximum system frequency, to update the
// voltage scaling value regarding system frequency refer to product
// datasheet.
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
// Enable HSE Oscillator and activate PLL with HSE as source
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
// This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
// your case, you have to recompute these PLL constants.
RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
// clocks dividers
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

То есть тактируемтся от 16 MHz HSI, все делители - 1.

Сам код передачи/приёма тоже HAL:

#include <stm32f4xx_hal.h>
UART_HandleTypeDef comp;
uint8_t for_send[] = {0};
uint8_t for_receive[] = {1};
void init_led ( void ) {
GPIO_InitTypeDef led;
__HAL_RCC_GPIOD_CLK_ENABLE( );
led.Mode = GPIO_MODE_OUTPUT_PP;
led.Pin = GPIO_PIN_14 | GPIO_PIN_15;
led.Speed = GPIO_SPEED_LOW;
led.Pull = GPIO_NOPULL;
HAL_GPIO_Init( GPIOD, &led );
}
void HAL_UART_MspInit ( UART_HandleTypeDef * huart ) {
   __HAL_RCC_USART1_CLK_ENABLE( );
   __HAL_RCC_GPIOB_CLK_ENABLE( );
   GPIO_InitTypeDef gpio;
   gpio.Mode = GPIO_MODE_AF_PP;
   gpio.Pin = GPIO_PIN_6 | GPIO_PIN_6;
   gpio.Pull = GPIO_PULLUP;
   gpio.Alternate = GPIO_AF7_USART1;
   gpio.Speed = GPIO_SPEED_MEDIUM;
   HAL_GPIO_Init( GPIOD, &gpio );
   HAL_NVIC_EnableIRQ( USART1_IRQn );
}
int main ( void ) {
   comp.Init.BaudRate = 9600;
   comp.Init.Mode = UART_MODE_TX_RX;
   comp.Init.HwFlowCtl = UART_HWCONTROL_NONE;
   comp.Init.WordLength = UART_WORDLENGTH_8B;
   comp.Init.OverSampling = UART_OVERSAMPLING_16;
   comp.Init.Parity = UART_PARITY_NONE;
   comp.Init.StopBits = UART_STOPBITS_1;
   comp.Instance = USART1;
   comp.State = 0;
   HAL_UART_Init( &comp );
   __HAL_USART_ENABLE_IT( &comp, UART_IT_TXE );
   __HAL_USART_ENABLE_IT( &comp, UART_IT_RXNE );
   init_led( );
   HAL_GPIO_WritePin( GPIOD, GPIO_PIN_15, SET );
   while ( 1 ) {
    for( volatile int i = 0; i < 100000; i ++ ) { ; }
    HAL_GPIO_TogglePin( GPIOD, GPIO_PIN_14 );
   }
}
void USART1_IRQHandler( void ) {
if ( __HAL_UART_GET_FLAG( &comp, UART_FLAG_TXE ) ) {
 __HAL_UART_DISABLE_IT( &comp, UART_IT_TXE );
 HAL_UART_Transmit( &comp, for_send, 1, 0 );
 __HAL_UART_CLEAR_FLAG( &comp, UART_FLAG_TXE );
}
if ( __HAL_UART_GET_FLAG( &comp, UART_FLAG_RXNE)) {
 __HAL_UART_DISABLE_IT( &comp, UART_FLAG_RXNE );
 HAL_UART_Receive( &comp, for_receive, 1, 0 );
 HAL_GPIO_WritePin( GPIOD, GPIO_PIN_15, RESET );
 __HAL_UART_CLEAR_FLAG( &comp, UART_FLAG_RXNE );
}
}

Всё просто. Включаем передачу, приём. Передаём, в приёмнике забираем информацию и гасим включенный светодиод.

ЗАходит в прерывание по TXE отправляет данные (Должны ли мы увидеть изменение регистра DR в отладчике, просто он остаётся пустой)

Отослал, вышел из прерывания, начитает мигать светодиодом( просто как индикатор что схема работает).

Но приёма не происходит.

Все инициализации сверены с user_manual. По всему коду прошёлся с отладчиком, все биты HAL выставляет правильно.

PB6 и PB7 просто перемычкой соединены.

Share this post


Link to post
Share on other sites

Народ, помогите. Не работает элементарная отправка единицы по UARTу и не знаю где ошибка. Подскажите, пожалуйста. Плата stm32f051

#include <stm32f0xx.h>

int main(void)

{

RCC->APB2ENR |= 0x00020000; //RCC_AHBENR_GPIOAEN;

GPIOA->MODER |= 0x00080000; //GPIO_MODER_MODER9_1;

GPIOA->OSPEEDR |= 0x000C0000; //~GPIO_OSPEEDER_OSPEEDR9;

RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

USART1->CR1 |= USART_CR1_UE;

USART1->CR2 |= 0x0;

USART1->BRR=0x1388;

USART1->CR1 |= USART_CR1_TE;

while (1)

{ //if ((GPIOA->IDR & GPIO_Pin_0) != 0)

{

while(!(USART1->ISR & 0x40)){}; //USART_SR_TC

USART1->TDR=1;

}

}

}

Edited by ProtonM16

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

#define APBCLK 48000000UL
#define BAUDRATE 115200UL



void Usart_init (void) 
    {
      RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
      RCC->APB2ENR|=RCC_APB2ENR_USART1EN;
      
      
                                         ;
      
      GPIOA->MODER &= ~(GPIO_MODER_MODER1 | GPIO_MODER_MODER10 |GPIO_MODER_MODER9);
      GPIOA->MODER |=  GPIO_MODER_MODER1_0 | GPIO_MODER_MODER10_1 |GPIO_MODER_MODER9_1; 
    
      GPIOA->AFR[1] |=(1<<(4*1)) |(1<<(4*2));
      USART1->BRR =(APBCLK+BAUDRATE/2)/BAUDRATE; //usart
      USART1->CR1 |= USART_CR1_TE |USART_CR1_RE|USART_CR1_RXNEIE; // USART1
      USART1->CR1 |= USART_CR1_UE; //   USART1  
            
      NVIC_SetPriority(USART1_IRQn, 0); 
      NVIC_EnableIRQ(USART1_IRQn); 
          
    }
    
 void Usart_Transmit(uint8_t Data)
{
  while(!(USART1->ISR & USART_ISR_TC));
  USART1->TDR = Data;
}

void USART1_IRQHandler(void)
{
    uint8_t rx;
    if(USART1->ISR & USART_ISR_RXNE)
    {

 
    rx = USART1->RDR; // Receive data, clear flag 
 
    
    }
}


void USART1_str (const char * data)
{

    
    while((*data )){ 
      Usart_Transmit (*data);
        data++;
      }
}

 

 

Для F0 ...

Edited by dosikus

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By svd
      Предлагаю печатные платы для паяльной станции на STM32 и OLED дисплее 1,3" версии 2.1S
      Плата делалась под китайский алюминиевый корпус.
      Тема, где обсуждается данная станция T12 , опубликована на сайте radiokot.ru
      Фото платы


      Схема немного доработана:
      1) добавлены блокировочные конденсаторы 0,1 мкФ в цепях микроконтроллера;
      2) добавлен резистор в цепи буззера для возможности снижения громкости;
      3) есть возможность подключать жала JBC (для Т12 в разъеме паяльника запаивается перемычка)

      Большинство элементов типоразмера 0603. DC/DC преобразователь PSR-7805LF можно заменить на любой китайский аналог или микросхему 7805
      Ссылки на возможные замены:
      DC/DC аналог 7805 №1
      DC/DC аналог 7805 №2

      Во вложениях схема и расположение элементов на ПП, чертеж передней панели и прошивка под дисплей 1.3" с контроллером SH1106.

      Цена за одну плату 400 руб c учетом стоимости пересылки по РФ. Количество плат ограничено.
      По всем вопросам просьба обращаться в личку.
       
      STM32_T12_2.1S_SSH1106_1.3_v2_.pdf передняя панель.pdf T12_HW21S_Encryption-SH1106.zip
    • By ART_ME
      Здравствуйте.
      Рискну спросить: не завалялась ли у кого в хозяйстве для STM32F103xx: 
      - AC induction motor IFOC software library V1.0
      либо 
      - ACIM and PMSM motor control software libraries release 2.0
      ?
      Просьба поделиться если вдруг такой раритет найдется. 
       
    • By Илья Юрченко
      Добрый день, уважаемые форумчане! Для научной работы хотел собрать данные о том, насколько микроконтроллеры stm32 удовлетворяют нужды и требования программистов и разработчиков продуктов на нем. Если не сложно, ответьте, пожалуйста, важны данные)
      Разумеется "очень средне" неадекватная метрика, но в рамках работы нужна именно средняя удовлетворённость, и определение существует ли необходимость в создании другой серии универсальных плат на базе МК.
    • By n_angelo
      Привет. Хочу узнать ваше мнение. Я новичок в embedded. Можно сказать, что пришел с веба. Малость Python, JS, C. Меня, конечно, предупреждали начать с AVR, но я уверенный в себе решил сразу залезть на STM32. Вынашивая идею для проекта, параллельно курив Reference Manual и Data Sheet по STM32, я понял что его будет слишком жирно для проекта. Я перескочил на STM8L. И тут меня начал огорчать мир embedded. При переходе между stm8 и stm32 нужно менять IDE (TrueStudio на STVD). Во избежание таких курьёзов я пересаживаюсь на IAR. В процессе подключения родной библиотеки от ST, понимаю что библиотека от IAR для того же самого STM8L152C6T6 дико отличается (макросы, структуры). Привет веб-разработка. Как такое могло произойти, что под один и тот же контроллер ST даёт одну библиотеку, а IAR другую. И нигде в уроках тебя не предупредят об этом. Ну, ребят, у меня всего одна жизнь. Вы уже договоритесь там между собой? Придите к единому стандарту. Или они так решили новичков завендерлочить? Моё мнение (не претендует на правильное): пробираясь сквозь тернии популярной архитектуры ARM, инфраструктуры, инструментария, забываешь про бизнес-логику устройств. А еще просто пропасть между "я ничего не понимаю" и "господи, я зажег светодиод". Речь не о копипастерах с уроков, а действительно понимая что ты делаешь, в каком регистре, что меняешь. Это путь в 2000 (а то и больше) страниц на английском перечитанных по несколько раз, чтобы отоложилось. И в конце тебя ждут разные версии одной и той же библиотки в разных IDE. И сидишь вдупляешь... ну почему... я же в правильный регистр кладу правильную маску... ох, наболело. Такое ощущение что не для людей это всё делали, не для людей.
      Ваше мнение?
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
  • Сообщения

    • Можно вместо светодиодов поставить реле либо транзисторы взять помощней и прямо ими включать светильники.
    • Россия к настоящему времени списала долги африканских стран на более чем 20 миллиардов долларов. Об этом сообщил президент России Владимир Путин на форуме «Россия – Африка» в Сочи, передает ТАСС.
    • За 200 руб - что он может отпугнуть? Да и название странное - "звукоотпугиватель".
    • Преувеличиваешь как всегда... Смотри на ютубе люди Чуффоли делали 3-х амперный и все нормально... обычный ящик...
    • На конкурс сайта2019 его,трёх-четырёх грузчиков надо припахать,а то самому в железе тяжеловато будет тащить.    
    • В системе обычного разрешения маньяку-теоретику наплевать на резисторы, или в УМ например, меня они не сильно беспокоят, если он ООСный - достаточно нормальной металлопленки. В малосигналочке, чем и является собстна буфер с регулятором, качество резисторов играет роль. Как и в ЦАПе например. Это слышно даже уже на системах классом чуть выше обычного. Тантал это конечно топчик. Можно и просто металлопленку нормальную. Но угольный или пластиковый регуль в ООС я бы лично не ставил.    Хотя.....у Мауры вон и МКТ на входе... Ай, ставьте что хотите!
    • Ну как то так. На сколько я понял это сердечник объединяющий катушки. К нему и нужно добавить необходимые катушки
  • Покупай!

×
×
  • Create New...