Skip to main content
ajaygargnsit
Associate II
December 15, 2016
Question

Inspite of google, unable to set up RX-interrupt on STM32F0

  • December 15, 2016
  • 1 reply
  • 557 views
Posted on December 15, 2016 at 12:57

Hi All.

I have a SOC, wherein a STM32F0 is connected to a modem via UART1.

The communication works 'mostly' fine when AT commands/responses are exchanged synchronously, but obviously things are not stable due to overrun-issues.

So, I am wanting to convert to async mode.

Following is the relavant code :

void init_at_interface() { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 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); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1, USART_IT_RXE, ENABLE) } void USART1_IRQHandler(void) { USART_SendData(USART3, (unsigned char)'>'); }

Note that UART3 is connected to putty, and is used for 'debugging'.

Finally, when I send do a USART_SendData(UART1, '\r\nAT\r\n'), I receive absolutely nothing on UART3/debug-screen (meaning that USART1_IRQHandler) is never hit.

What stupidity am I committing?

    This topic has been closed for replies.

    1 reply

    ajaygargnsit
    Associate II
    December 15, 2016
    Posted on December 15, 2016 at 12:58

    Sorry, following is the properly-formatted code ::

    void init_at_interface()

    {

        USART_InitTypeDef USART_InitStructure;

        GPIO_InitTypeDef GPIO_InitStructure;

        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);

        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 | GPIO_Pin_10;

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

        GPIO_Init(GPIOA, &GPIO_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

        NVIC_InitStructure.NVIC_IRQChannelPriority = 0;

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

        NVIC_Init(&NVIC_InitStructure);

        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);

        USART_Cmd(USART1, ENABLE);

        USART_ITConfig(USART1, USART_IT_RXE, ENABLE)

    }

    void USART1_IRQHandler(void)

    {

        USART_SendData(USART3, (unsigned char)'>');

    }