stm32VL UART problem
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-02 6:14 PM
Hi
i have to communicate with modem using uart via AT commandmy pb is when i send the first command and receive the reponse i can't send the next AT using uarti can post my code if any one can help me #uart #adc-stm32-discovery- Labels:
-
ADC
-
UART-USART
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-02 6:28 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-02 7:21 PM
#include ''stm32f10x.h''
#include ''STM32vldiscovery.h''
#include ''stm32f10x_gpio.h''
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void SendString(char *s)
{
while(*s)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
USART_SendData(USART1, *s++);
}
}
int main(void)
{
USART_InitTypeDef USART_InitStructure;
/* System Clocks Configuration */
RCC_Configuration();
/* NVIC configuration */
//NVIC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
/* USARTx configuration ------------------------------------------------------*/
/* USARTx configured as follow:
- BaudRate = 9600 baud
- Word Length = 8 Bits
- Two Stop Bit
- Odd parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init( USART1,&USART_InitStructure);
/* You might want some delays between these,
I'm just illustrating how to transmit to the USART
with a subroutine */
SendString(''AT?
'');
SendString(''ATB
'');
while(1)
{
}
}
void RCC_Configuration(void)
{
/* Enable GPIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Enable USART2 Clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
/* Setup the microcontroller system. Initialize the Embedded Flash Interface,
initialize the PLL and update the SystemFrequency variable. */
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure USART1 Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/* Configure USART1 Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf(''Wrong parameters value: file %s on line %d
'', file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
Up vote any posts that you find helpful, it shows what's working..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-03 5:37 PM
thx using fct to send is an easy way
in your opinion for the reception I had to use interrupt or just polling mode i must compare the Inbuffer to send other AT command- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-04 7:24 AM
in your opinion for the reception I had to use interrupt or just polling mode
i must compare the Inbuffer to send other AT command.
There are a number of ways of doing it, I personally use interrupts, and FIFO (ring) buffers on both the receive and transmit side.Up vote any posts that you find helpful, it shows what's working..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-04 9:22 AM
One little thing in case of using interrupt after receiving data from modem i must compare the reponse with the true one
so i have to clear Rxbuffer after each reception ?- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-04 9:58 AM
One little thing in case of using interrupt after receiving data from modem i must compare the reponse with the true one so i have to clear Rxbuffer after each reception ?
In a robust solution, you'll need to parse the responses, different modems respond differently, and you might get unexpected responses. Typically you'd be looking for ''OK'', ''ERROR'', ''NO CARRIER'', etc.
Up vote any posts that you find helpful, it shows what's working..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-08 3:57 PM
Hi again
I use for the comparaison the function ''buffercmp'' which compaire 2 buffer as result ''FAILED'' or ''PASSED'' i want a way which after the comparaison to clear the Rxbuffer- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-08 5:31 PM
I use for the comparaison the function ''buffercmp'' which compaire 2 buffer as result ''FAILED'' or ''PASSED'' i want a way which after the comparaison to clear the Rxbuffer
While I think this is a rather sloppy approach, what you're suggesting would look like this :// Receive enough to evaluate...
if (Buffercmp(RxBuffer, ''ERROR'', RxCounter) == PASSED)
puts(''Modem returned ERROR!'');
RxCounter = 0; // Clear RxBuffer to beginning
Up vote any posts that you find helpful, it shows what's working..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2012-05-08 7:18 PM
which the best way so in your opinion
i have multiple reception for each reception i must compare and send the suitable command