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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SIM900 и STM32F1xx, STM32F4xx, вопрос по железу.
Morze
сообщение May 17 2012, 11:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 18-01-08
Из: Королев
Пользователь №: 34 196



Хочется подключить модуль по полному USART2. На стороне микроконтроллера имеем:
USART2_TX
USART2_RX
USART2_CTS
USART2_RTS
USART2_CK
На стороне SIM900:
TXD
RXD
RTS
CTS
DTR
DCD
RI
С TXD, RXD, RTS, CTS вся вполне понятно. А вот с линиями DTR, DCD и RI что-то не ясно.
Есть пользователи этих модемов, кто подключал их к STM? Ткните носом пожалуйста rolleyes.gif
Go to the top of the page
 
+Quote Post
CADiLO
сообщение May 17 2012, 11:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



DTR, DCD и RI подключаете просто к любым портам - их необходимость определяется уже требованиями под вашу задачу.
SIM900_Serial Port_Application Note_V1.02.pdf


--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
Morze
сообщение May 17 2012, 11:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 18-01-08
Из: Королев
Пользователь №: 34 196



Спасибо большое. Все понятно стало biggrin.gif
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 19 2012, 05:44
Сообщение #4


Знающий
****

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



Кстати у STM есть возможность все выходы, в том числе и используемые как USARTx_TX, сконфигурировать в режим ОК(открытый коллектов), что очень удобноо для согласования уровней и предотвращения паразитного питания. И еще у STM-овского UART нет аппаратного буфера поэтому, если не хотите что-бы RTC дергалась после каждого принятого байта, этой тожкой лучше управлять программно.
Go to the top of the page
 
+Quote Post
Morze
сообщение May 30 2012, 03:56
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 18-01-08
Из: Королев
Пользователь №: 34 196



Цитата(=F8= @ May 19 2012, 09:44) *
Кстати у STM есть возможность все выходы, в том числе и используемые как USARTx_TX, сконфигурировать в режим ОК(открытый коллектов), что очень удобноо для согласования уровней и предотвращения паразитного питания.

Можно запитать МК от 2.8 вольт.
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 30 2012, 05:40
Сообщение #6


Знающий
****

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



Цитата(Morze @ May 30 2012, 06:56) *
Можно запитать МК от 2.8 вольт.http://electronix.ru/forum/style_images/1/folder_editor_images/rte-switch-editor.png

Это не решает проблемы с паразитным питанием. При любом питании придется следить за Status что бы вовремя перевести ножки в z состояние. Если использовать выход с ОК то этой проблемы не будет. Кроме того при питании 2.8В могут быть прблемы с 5В переферией.
Go to the top of the page
 
+Quote Post
Morze
сообщение May 31 2012, 07:04
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 18-01-08
Из: Королев
Пользователь №: 34 196



Цитата(=F8= @ May 30 2012, 09:40) *
Это не решает проблемы с паразитным питанием. При любом питании придется следить за Status что бы вовремя перевести ножки в z состояние. Если использовать выход с ОК то этой проблемы не будет. Кроме того при питании 2.8В могут быть прблемы с 5В переферией.

Спасибо.
Есть мысль повесить входы SIM900 через преобразователи уровней SN74LVC2T45. Питание преобразователя (ту сторону, на которой стоит SIM900) давать с LDO 2.8вольта, управляя сигналом VDD_EXT. Или все таки управлять сигналом STATUS?
Go to the top of the page
 
+Quote Post
CADiLO
сообщение May 31 2012, 08:14
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



При включении контроллера все выводы до инициализации однозначно будут или входами или в 3 состоянии.
Значит при питании контроллера 2.8-3.0 вольта достаточно анализа STATUS и выводы соединяем без преобразователей уровня.
При 3.3 вольта на контроллере и выше - ставим преобразователь и далее как предлагали. Здесь Vext и STATUS будут равнозначны,
только учитывайте что STATUS имеет меньшую нагрузочную способность, так как это вывод чипсета.

Единственное место - POWERKEY - даже если контроллер умеет настраиваться в виртуальный открытый коллектор,
настоятельно рекомендую ставить в эту цепь ключик - как показано у SIMCOM. Были неприятные прецеденты.
На 1 транзисторе много не сэкономите, зато одну из причин возможных глюков гарантировано устраните.


--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
Morze
сообщение May 31 2012, 17:11
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 18-01-08
Из: Королев
Пользователь №: 34 196



Удалил весь бред, что написал. Переделываю)

Сообщение отредактировал Morze - Jun 1 2012, 05:13
Go to the top of the page
 
+Quote Post
Peps
сообщение Jun 1 2012, 09:31
Сообщение #10


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

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



Цитата(=F8= @ May 19 2012, 08:44) *
Кстати у STM есть возможность все выходы, в том числе и используемые как USARTx_TX, сконфигурировать в режим ОК(открытый коллектов), что очень удобноо для согласования уровней и предотвращения паразитного питания. И еще у STM-овского UART нет аппаратного буфера поэтому, если не хотите что-бы RTC дергалась после каждого принятого байта, этой тожкой лучше управлять программно.


Сегодня прыгал по граблям с STM8S. Выползло неприятное свойство: при настройке GPIO в режим открытого коллектора - проблем не возникает - работает как открытый коллектор. А если на этом выводе включается периферия (в частности UART1) - он опять становится подтянут к питанию микроконтроллера. О как! То есть при работе с UART согласование уровней с помощью ОК не прокатит. Акцентирую внимание, это я проверял на STM8S103K.
Go to the top of the page
 
+Quote Post
ssokol
сообщение Jun 1 2012, 10:51
Сообщение #11


Знающий
****

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



Цитата(Peps @ Jun 1 2012, 13:31) *
Сегодня прыгал по граблям с STM8S. Выползло неприятное свойство: при настройке GPIO в режим открытого коллектора - проблем не возникает - работает как открытый коллектор. А если на этом выводе включается периферия (в частности UART1) - он опять становится подтянут к питанию микроконтроллера. О как! То есть при работе с UART согласование уровней с помощью ОК не прокатит. Акцентирую внимание, это я проверял на STM8S103K.

Точно так же и у stm32 cortex m3 ... да не отсохнет язык у CADiLO в очередной раз повторять одно и то же Ж:-)))
Go to the top of the page
 
+Quote Post
CADiLO
сообщение Jun 1 2012, 11:00
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



пора уже мантру писать..... sm.gif


--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
=F8=
сообщение Jun 1 2012, 11:17
Сообщение #13


Знающий
****

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



Цитата(ssokol @ Jun 1 2012, 13:51) *
Точно так же и у stm32 cortex m3 ... да не отсохнет язык у CADiLO в очередной раз повторять одно и то же Ж:-)))

Нету там подтяжки. Только-что специально перерезал дорожку и убрал подтягивающий резистор. После инициализации порта на ножке 0. Контроллер STM32F103RCT. Если кому интересно могу и на STM32F207 проверить.
Go to the top of the page
 
+Quote Post
CADiLO
сообщение Jun 1 2012, 11:23
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



>>>После инициализации порта на ножке 0.

ноль или Z ?



--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
=F8=
сообщение Jun 1 2012, 11:45
Сообщение #15


Знающий
****

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



Цитата(CADiLO @ Jun 1 2012, 14:23) *
>>>После инициализации порта на ножке 0.

ноль или Z ?

Z разумеется. 0 это то, что тестор показывает sm.gif Верхний транзастор закрыт т.к. ОК, нижний тоже. На тесторе тоже разрыв цепи.
Для контроля на предмет не напутал ли чего переконфиурировал ножку из режима OD в режим PP на ножке, как и положено после инициализации появилась "1".
Go to the top of the page
 
+Quote Post
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 Текстовая версия Сейчас: 22nd July 2025 - 22:49
Рейтинг@Mail.ru


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