реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> SIM900 и STM32F1xx, STM32F4xx, вопрос по железу.
Peps
сообщение Jun 1 2012, 12:26
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 12-01-10
Из: Минск
Пользователь №: 54 745



Цитата(=F8= @ Jun 1 2012, 14:45) *
Z разумеется. 0 это то, что тестор показывает sm.gif Верхний транзастор закрыт т.к. ОК, нижний тоже. На тесторе тоже разрыв цепи.
Для контроля на предмет не напутал ли чего переконфиурировал ножку из режима OD в режим PP на ножке, как и положено после инициализации появилась "1".


Ага! А вот теперь если на эту ножку выходит TxD UARTа попробуйте включить передатчик UART (обязательно включите ему и тактовую частоту) и вуаля! Порт опять в 1 (напряжение питания контроллера). Весь цимус в том, что если ножка работает как порт IO - то не вопрос - все конфигурируется как надо, а если на него выходит TxD - то уже обычный пуш-пул (или подтянут резистором).
А у себя на плате я на всякий случай предусмотрел преобразователь уровня на одном биполярнике. Эх, видимо сработали прадедушкины гены из Израиля sm.gif

Сообщение отредактировал Peps - Jun 1 2012, 12:28
Go to the top of the page
 
+Quote Post
=F8=
сообщение Jun 1 2012, 12:46
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(Peps @ Jun 1 2012, 15:26) *
Ага! А вот теперь если на эту ножку выходит TxD UARTа попробуйте включить передатчик UART (обязательно включите ему и тактовую частоту) и вуаля! Порт опять в 1 (напряжение питания контроллера). Весь цимус в том, что если ножка работает как порт IO - то не вопрос - все конфигурируется как надо, а если на него выходит TxD - то уже обычный пуш-пул (или подтянут резистором).
А у себя на плате я на всякий случай предусмотрел преобразователь уровня на одном биполярнике. Эх, видимо сработали прадедушкины гены из Израиля sm.gif


Я же написал проверял после инициализации порта.
Код
bool UartT::Open()
{
  if(!OpenFlag)
  {
    TxCounter  = TxRdIndex = 0;
    TxStopped  = 0;
    TxComplete = 1;
    RxRdIndex  = 0;
    
    USART_DeInit(UART);
    
    {
      USART_InitTypeDef  UART_InitStructure;
      
      UART_InitStructure.USART_BaudRate   = UartLineCoding.dwDTERate;
      UART_InitStructure.USART_WordLength = USART_WordLength_8b;
      UART_InitStructure.USART_StopBits   = USART_StopBits_1;
      UART_InitStructure.USART_Parity     = USART_Parity_No;
      UART_InitStructure.USART_Mode       = USART_Mode_Rx|USART_Mode_Tx;
      UART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        
      USART_Init(UART,&UART_InitStructure);
      
      USART_ClearFlag(UART, USART_FLAG_CTS | USART_FLAG_LBD  |
                               USART_FLAG_TC  | USART_FLAG_RXNE );
    }
    
    {
      DMA_InitTypeDef DMA_InitStruct;
      
      DMA_DeInit(RxDMA_Channel);
      
      DMA_InitStruct.DMA_PeripheralBaseAddr = (U32)&UART->DR;
      DMA_InitStruct.DMA_MemoryBaseAddr     = (U32)&RxBuffer[0];
      DMA_InitStruct.DMA_DIR                = DMA_DIR_PeripheralSRC;  
      DMA_InitStruct.DMA_BufferSize         = RX_BUFFER_SIZE;
      DMA_InitStruct.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
      DMA_InitStruct.DMA_MemoryInc          = DMA_MemoryInc_Enable;
      DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
      DMA_InitStruct.DMA_MemoryDataSize     = DMA_MemoryDataSize_Byte;
      DMA_InitStruct.DMA_Mode               = DMA_Mode_Circular;
      DMA_InitStruct.DMA_Priority           = DMA_Priority_Low;
      DMA_InitStruct.DMA_M2M                = DMA_M2M_Disable;
      
      DMA_Init(RxDMA_Channel, &DMA_InitStruct);
      DMA_Cmd(RxDMA_Channel, ENABLE);
      
      DMA_DeInit(TxDMA_Channel);
      
      DMA_InitStruct.DMA_PeripheralBaseAddr = (U32)&UART->DR;
      DMA_InitStruct.DMA_MemoryBaseAddr     = (U32)&TxTmpBuffer[0];
      DMA_InitStruct.DMA_DIR                = DMA_DIR_PeripheralDST;  
      DMA_InitStruct.DMA_BufferSize         = 16;
      DMA_InitStruct.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
      DMA_InitStruct.DMA_MemoryInc          = DMA_MemoryInc_Enable;
      DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
      DMA_InitStruct.DMA_MemoryDataSize     = DMA_MemoryDataSize_Byte;
      DMA_InitStruct.DMA_Mode               = DMA_Mode_Normal;
      DMA_InitStruct.DMA_Priority           = DMA_Priority_Low;
      DMA_InitStruct.DMA_M2M                = DMA_M2M_Disable;
      
      DMA_Init(TxDMA_Channel, &DMA_InitStruct);
      DMA_ITConfig(TxDMA_Channel, DMA_IT_TC, ENABLE);
      OpenFlag = true;
    }
  

    // Enable UART
    USART_DMACmd(UART, USART_DMAReq_Rx|USART_DMAReq_Tx, ENABLE);  
    USART_Cmd(UART, ENABLE);
  
  }
  return true;
}


bool GSM_UartT::Open()
{
    UART = USART3;
    TxDMA_Channel = DMA1_Channel2;
    RxDMA_Channel = DMA1_Channel3;
    
    if(OpenFlag)return true;
    
    portENTER_CRITICAL();
    
    Config(&GsmLineCoding);
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
    
    GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);

    {
      GPIO_InitTypeDef GPIO_InitStructure;
      // Assign PC10 to UART4 (Tx)
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
      GPIO_Init(GPIOC, &GPIO_InitStructure);

      // Assign PC11 to UART4 (Rx)
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
      GPIO_Init(GPIOC, &GPIO_InitStructure);
    }
    // Init UART4
    
    UartT::Open();
    
    {
      NVIC_InitTypeDef NVIC_InitStructure;
      
      NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel2_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    }
    portEXIT_CRITICAL(); //ПРОВЕРЯЛ В ЭТОЙ ТОЧКЕ.
    return true;
}
Go to the top of the page
 
+Quote Post
Peps
сообщение Jun 1 2012, 13:27
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 12-01-10
Из: Минск
Пользователь №: 54 745



Ну в таком случае реализация портов в Cortex-ах отличается от STM8
Go to the top of the page
 
+Quote Post
ssokol
сообщение Jun 24 2012, 17:05
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 615
Регистрация: 14-02-08
Из: г. Рыбинск, Ярославская область
Пользователь №: 35 028



Цитата(=F8= @ Jun 1 2012, 16:46) *
Я же написал проверял после инициализации порта.

читаем RM0041
TX: Transmit Data Output. When the transmitter is disabled, the output pin returns to its IO
port configuration. When the transmitter is enabled and nothing is to be transmitted, the TX
pin is at high level. In single-wire and smartcard modes, this IO is used to transmit and
receive the data (at USART level, data are then received on SW_RX).
... уж так хотим CADiLO в монастырь загнать...
Go to the top of the page
 
+Quote Post
Peps
сообщение Jun 25 2012, 07:09
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 12-01-10
Из: Минск
Пользователь №: 54 745



Вот, после того, как я обломался на железе, внимательно перечитав мануалку нашел то же самое.
Go to the top of the page
 
+Quote Post
=F8=
сообщение Jun 25 2012, 07:21
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата
Цитата(ssokol @ Jun 24 2012, 21:05) *
читаем RM0041
TX: Transmit Data Output. When the transmitter is disabled, the output pin returns to its IO
port configuration. When the transmitter is enabled and nothing is to be transmitted, the TX
pin is at high level. In single-wire and smartcard modes, this IO is used to transmit and
receive the data (at USART level, data are then received on SW_RX).
... уж так хотим CADiLO в монастырь загнать...

А теперь еще раз перечитываем и задаем себе вопрос что представляет собой high level в режиме открытый сток? Если возникают сомнения может ли выход одновременно работать в режиме AF и OD (сомнения обоснованные т.к. не каждый контроллер позволяет такой финт ушами) смотрим таблицу 20 RM0008 для STM101-107 и таблицу 14 RM0033 для STM205-215. Если сомнения все-же остаются берем контроллер, инициализируем порт и проверяем.
Цитата
Вот, после того, как я обломался на железе, внимательно перечитав мануалку нашел то же самое.

А я вот не обломался. Наверное что-то не так сделал...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 13:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016