Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 22:40

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: stm32vldiscovery usart\uart
СообщениеДобавлено: 14 май 2012, 23:49 
Только пришел

Зарегистрирован: 10 апр 2012, 23:31
Сообщения: 10
Прошу помощи, делаю меню на usart, но не знаю как сравнить введенные данные.
Суть такая:
1. Подключаемся к COM-порту
2. Вылезает меню:
1. Led menu
2. Exit
3. Если ввели 1, то открывает меню светодиодов, иначе deinit...
Не знаю как взять из RecieveData вытащить данные и сравнить допустим с единицей.
Код:
Код:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"

u8      uart1_rx_buf[32];
u8      uart1_rx_bit;
void print(const char* str);
void NVIC_Configuration(void) {
   NVIC_InitTypeDef NVIC_InitStructure;

     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 
     USART_Cmd(USART1, ENABLE);
}

void USART1_Init() {
    GPIO_InitTypeDef GPIO_InitStruct;
    USART_InitTypeDef USART_InitStruct;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
   
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; /* PA9 = TX */
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; /* PA10 = RX */
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    USART_DeInit(USART1);
    USART_StructInit(&USART_InitStruct);
    USART_InitStruct.USART_BaudRate = 115200;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(USART1, &USART_InitStruct);
    USART_Cmd(USART1, ENABLE);
}

void USART1_IRQHandler(void) { // что тут должно быть?
   if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
      uart1_rx_buf[uart1_rx_bit]=USART_ReceiveData(USART1);
      uart1_rx_bit++;
      if(uart1_rx_buf[uart1_rx_bit]==1) {
         print("Ok\r\n");   
      } else {
         print("Bad\r\n");
      }
      //USART_SendData(USART1, uart1_rx_buf[uart1_rx_bit]);   
   }
}

void print(const char* str)
{
   unsigned int i;
   for(i = 0; str[i]; i++) {
      while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE));
       USART_SendData(USART1,str[i]);
   }
}

void menu() {
   print("Welcome!\r\n");
   print("1. Led menu\r\n");
   print("0. Exit\r\n");
}

int main() {
   USART1_Init();
   NVIC_Configuration();
   menu();
   while(1) {
      USART1_IRQHandler();
   }
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB