sinsay (26.09.2012 19:06 - 21:45, просмотров: 8422)
поставили задачу необходимо задействовать ногу 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 ,тогда не работает. В чем может быть причина?