Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-дек-18 23:30

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Проблемы с UARD
СообщениеДобавлено: 2015-июл-17 13:54 
Не в сети

Зарегистрирован: 2015-июл-13 11:01
Сообщения: 8
Решил написать программу для отсылки с ПК простых команд МК, но проблема в том то отсылка МК->ПК работает, а когда ПК посылает команды нет, и получается при приёме битов,не срабатывает прерывание.


Код:
#include "MDR1986VE1T.h" // Device header
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_uart.h"
#include "MDR32F9Qx_rst_clk.h"
#include "string.h"



char uart_rx_buf[128];
uint8_t uart_rx_bit;
static PORT_InitTypeDef PORT_Initstructure;
static PORT_InitTypeDef PORT_InitStructure;
static UART_InitTypeDef UART_InitStructure;

void LED(){
   
         RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD, ENABLE);
         PORT_StructInit(&PORT_Initstructure);
         PORT_Initstructure.PORT_Pin = (PORT_Pin_7 | PORT_Pin_0 | PORT_Pin_12);
         PORT_Initstructure.PORT_OE = PORT_OE_OUT;
         PORT_Initstructure.PORT_FUNC = PORT_FUNC_PORT;
         PORT_Initstructure.PORT_MODE = PORT_MODE_DIGITAL;
         PORT_Initstructure.PORT_SPEED = PORT_SPEED_MAXFAST;
         PORT_Init(MDR_PORTD, &PORT_Initstructure);
}

void send_to_uart(uint8_t data)
{
while(!(UART_GetITStatus(MDR_UART1, UART_IT_TX) == SET));
MDR_UART1->DR=data;
}


void send_str(char *string)
{
uint8_t i=0;
while(string[i])
{
  send_to_uart(string[i]);
  i++;
}
}


void uart_init(void)
{
   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);
  RST_CLK_PCLKcmd(RST_CLK_PCLK_UART1, ENABLE);


  PORT_InitStructure.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;
   PORT_InitStructure.PORT_PD_SHM = PORT_PD_SHM_OFF;
   PORT_InitStructure.PORT_PD = PORT_PD_DRIVER;
   PORT_InitStructure.PORT_GFEN = PORT_GFEN_OFF;
   PORT_InitStructure.PORT_FUNC = PORT_FUNC_MAIN;
   PORT_InitStructure.PORT_SPEED = PORT_SPEED_MAXFAST;
   PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;


   PORT_InitStructure.PORT_OE = PORT_OE_OUT;
   PORT_InitStructure.PORT_Pin = PORT_Pin_3;
   PORT_Init(MDR_PORTC, &PORT_InitStructure);


   PORT_InitStructure.PORT_OE = PORT_OE_IN;
   PORT_InitStructure.PORT_Pin = PORT_Pin_4;
   PORT_Init(MDR_PORTC, &PORT_InitStructure);


   UART_InitStructure.UART_BaudRate = 9600;
   UART_InitStructure.UART_WordLength = UART_WordLength8b;
   UART_InitStructure.UART_StopBits = UART_StopBits1;
   UART_InitStructure.UART_Parity = UART_Parity_No;
   UART_InitStructure.UART_FIFOMode = UART_FIFO_OFF;
   UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_RXE
         | UART_HardwareFlowControl_TXE;

  UART_Init(MDR_UART1, &UART_InitStructure);
  UART_Cmd(MDR_UART1, ENABLE);
}

void UART1_IRQHandler (void)
{
      char uart_data;
      if (UART_GetITStatus(MDR_UART1, UART_IT_RX) == SET)
      {
      MDR_UART1->DR = MDR_UART1->DR;
      uart_data=MDR_UART1->DR;
      uart_rx_buf[uart_rx_bit]=MDR_UART1->DR;
       uart_rx_bit++;

       if(uart_data=='\r')
       {
          PORT_ResetBits(MDR_PORTD, PORT_Pin_7);
          if(strcmp(uart_rx_buf,"led0\r")==0)
          {
          PORT_SetBits(MDR_PORTD,PORT_Pin_7);
          }

          else if(strcmp(uart_rx_buf,"about\r")==0)
          {
             send_str("************************************\r\n");

          }
          else
          {
             send_str("\n");
             send_str("String: ");
             send_str(uart_rx_buf);
          }

         memset(uart_rx_buf, 0, sizeof(uart_rx_buf));
         uart_rx_bit=0;
         send_str("\n");
      }
      }
}

int main(void)
{
   LED();
   uart_init();
   __enable_irq();
   NVIC_EnableIRQ(UART1_IRQn);
   NVIC_SetPriority(UART1_IRQn, 0);
   MDR_UART1->CR |= UART_CR_RXE;
   
    while(1)
    {
         
    }
}


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

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


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

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


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

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB