ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
357259
sinsay (26.09.2012 19:06 - 21:45, просмотров: 8427)
поставили задачу необходимо задействовать ногу PA9, (на ней висит TX USART1) в двух вариантах, это обычный GPIO сконфигурированный на выход и выход UART. Сначало я должен ногу PA9 опустить в низкий уровень на 200us, потом поднять до единицы на 100us, а дальше посылать через TX данные по USART, и это все в цикле. По отдельности у меня все работает нога управляется , по UART передается, но когда пытаюсь совместить , т.е. сначало нога сконфигурирована как GPIO, а потом как UART, то не работает. Вот инициализация UART вызывается один раз перед вызовом процедуры arraysend(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); // TX: выход push-pull // gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Pin = GPIO_Pin_9; GPIO_Init(GPIOA, &gpio); // RX: высокоимпендансный вход gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; gpio.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOA, &gpio); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitTypeDef USART_InitStructure; // Параметры по умолчанию: 9600 бод, 8 бит данных, 1 стоп-бит //--------------------------------------- USART_InitStructure.USART_BaudRate = 250000; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //---------------------------------------- USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); //---------------- Конец инициализации -------------------------- Теперь процедура которая вызывается переодически в цикле сначало дрыгает ногой потом шлет 50 байт по UART. void arraysend (void) {//0 unsigned int i,d; unsigned char startcode; //unsigned char temp; GPIO_InitTypeDef gpio; USART_InitTypeDef USART_InitStructure; amount_channels=50; startcode=0; //-----запретил UART---------- USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, DISABLE); // дрыгаю ногой PA9 перед посылкой по UART //----Cконфигурировал пин PA9 как GPIO------------------ gpio.GPIO_Pin = (GPIO_Pin_9 );// LED gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init( GPIOA, &gpio); GPIO_ResetBits( GPIOA, GPIO_Pin_9); delay(4); //низкий уровень 200us GPIO_SetBits( GPIOA, GPIO_Pin_9); delay(1); //высокий уровень 100us //--------------------------------------------- // переконфигурировал ногу на посылку по UART // TX: выход push-pull // gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Pin = GPIO_Pin_9; GPIO_Init(GPIOA, &gpio); //--------------Разрешил UART------------------------ USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); //---------------------------------------------- // -----------Сама посылка по UART------------------ putchar_UART1(startcode); for (i=0; i<amount_channels; i++) //+2 becouse +curtime, +curwait {//2 putchar_UART1(DATA_BUFFER_SEND[i]); }//2 }//end regime 1 Проблема в том что не хочет работать, по отдельности все работает GPIO, UART, а когда приходится переконфигурировать ногу PA9 , то на GPIO , то на UART ,тогда не работает. В чем может быть причина?