|
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; }
|
|
|
|
Сообщений в этой теме
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    ssokol Цитата(=F8= @ Jun 1 2012, 16:46) Я же нап... Jun 24 2012, 17:05     =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
|
|
|