|
SIM900 и STM32F1xx, STM32F4xx, вопрос по железу. |
|
|
|
May 17 2012, 11:28
|
Участник

Группа: Участник
Сообщений: 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? Ткните носом пожалуйста
|
|
|
|
|
 |
Ответов
|
Jun 1 2012, 11:45
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
Цитата(CADiLO @ Jun 1 2012, 14:23)  >>>После инициализации порта на ножке 0.
ноль или Z ? Z разумеется. 0 это то, что тестор показывает  Верхний транзастор закрыт т.к. ОК, нижний тоже. На тесторе тоже разрыв цепи. Для контроля на предмет не напутал ли чего переконфиурировал ножку из режима OD в режим PP на ножке, как и положено после инициализации появилась "1".
|
|
|
|
|
Jun 1 2012, 12:26
|
Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 12-01-10
Из: Минск
Пользователь №: 54 745

|
Цитата(=F8= @ Jun 1 2012, 14:45)  Z разумеется. 0 это то, что тестор показывает  Верхний транзастор закрыт т.к. ОК, нижний тоже. На тесторе тоже разрыв цепи. Для контроля на предмет не напутал ли чего переконфиурировал ножку из режима OD в режим PP на ножке, как и положено после инициализации появилась "1". Ага! А вот теперь если на эту ножку выходит TxD UARTа попробуйте включить передатчик UART (обязательно включите ему и тактовую частоту) и вуаля! Порт опять в 1 (напряжение питания контроллера). Весь цимус в том, что если ножка работает как порт IO - то не вопрос - все конфигурируется как надо, а если на него выходит TxD - то уже обычный пуш-пул (или подтянут резистором). А у себя на плате я на всякий случай предусмотрел преобразователь уровня на одном биполярнике. Эх, видимо сработали прадедушкины гены из Израиля
Сообщение отредактировал Peps - Jun 1 2012, 12:28
|
|
|
|
|
Jun 1 2012, 12:46
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
Цитата(Peps @ Jun 1 2012, 15:26)  Ага! А вот теперь если на эту ножку выходит TxD UARTа попробуйте включить передатчик UART (обязательно включите ему и тактовую частоту) и вуаля! Порт опять в 1 (напряжение питания контроллера). Весь цимус в том, что если ножка работает как порт IO - то не вопрос - все конфигурируется как надо, а если на него выходит TxD - то уже обычный пуш-пул (или подтянут резистором). А у себя на плате я на всякий случай предусмотрел преобразователь уровня на одном биполярнике. Эх, видимо сработали прадедушкины гены из Израиля  Я же написал проверял после инициализации порта. Код 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; }
|
|
|
|
|
Jun 24 2012, 17:05
|
Знающий
   
Группа: Свой
Сообщений: 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 в монастырь загнать...
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|