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

 
 
> 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
 
Start new topic
Ответов
CADiLO
сообщение Jun 1 2012, 11:23
Сообщение #2


Гуру
******

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



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

ноль или Z ?



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


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Участник
Сообщений: 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
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 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
ssokol
сообщение Jun 24 2012, 17:05
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- Morze   SIM900 и STM32F1xx, STM32F4xx   May 17 2012, 11:28
- - CADiLO   DTR, DCD и RI подключаете просто к любым портам -...   May 17 2012, 11:31
- - Morze   Спасибо большое. Все понятно стало   May 17 2012, 11:49
- - =F8=   Кстати у STM есть возможность все выходы, в том чи...   May 19 2012, 05:44
|- - Morze   Цитата(=F8= @ May 19 2012, 09:44) Кстати ...   May 30 2012, 03:56
||- - =F8=   Цитата(Morze @ May 30 2012, 06:56) Можно ...   May 30 2012, 05:40
||- - Morze   Цитата(=F8= @ May 30 2012, 09:40) Это не ...   May 31 2012, 07:04
|- - Peps   Цитата(=F8= @ May 19 2012, 08:44) Кстати ...   Jun 1 2012, 09:31
|- - ssokol   Цитата(Peps @ Jun 1 2012, 13:31) Сегодня ...   Jun 1 2012, 10:51
|- - =F8=   Цитата(ssokol @ Jun 1 2012, 13:51) Точно ...   Jun 1 2012, 11:17
- - CADiLO   При включении контроллера все выводы до инициализа...   May 31 2012, 08:14
|- - Morze   Удалил весь бред, что написал. Переделываю)   May 31 2012, 17:11
- - CADiLO   пора уже мантру писать.....   Jun 1 2012, 11:00
|- - =F8=   ЦитатаЦитата(ssokol @ Jun 24 2012, 21:05)...   Jun 25 2012, 07:21
- - Peps   Ну в таком случае реализация портов в Cortex-ах ...   Jun 1 2012, 13:27
- - Peps   Вот, после того, как я обломался на железе, внимат...   Jun 25 2012, 07:09


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:41
Рейтинг@Mail.ru


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