Перейти к содержанию

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


Гость 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 просто перемычкой соединены.

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

  • 3 недели спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Народ, помогите. Не работает элементарная отправка единицы по 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;

}

}

}

Изменено пользователем ProtonM16
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

  • 1 год спустя...
  • 1 месяц спустя...
#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 ...

Изменено пользователем dosikus
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...