Skip to main content
mikropart
Associate
January 31, 2015
Question

Uart in STM32F4

  • January 31, 2015
  • 8 replies
  • 1905 views
Posted on January 31, 2015 at 16:03

I create a program for uart interrupt receiving by cubeMX in ARM-MDK.

I want interrupt receivng from PC(when for example 0xFF received from pc by hyperterminal or docklight).

I write bellow program.

main()

{

   while (1)

   {

        if(HAL_UART_Receive_IT(&huart6, (uint8_t *)aRxBuffer, 8) != HAL_OK)

       {

            HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_13);

            HAL_Delay(0x000000ff);

       }

        HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_12);

        HAL_Delay(0x000000ff);

    }

}

///////////////////////////////////////////////////

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)

{

    HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_15);

}

but not work.Please help me.

    This topic has been closed for replies.

    8 replies

    waclawek.jan
    Super User
    February 2, 2015
    Posted on February 02, 2015 at 09:40

    You might want to start with reviewing and reproducing the examples contained within the Cube package.

    JW
    mikropart
    mikropartAuthor
    Associate
    February 2, 2015
    Posted on February 02, 2015 at 20:29

    hi

    I read cube example but i don't know. do you have a simple example?

    Tesla DeLorean
    Guru
    February 2, 2015
    Posted on February 02, 2015 at 21:28

    do you have a simple example?

    Not a HAL one.

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    dhiry2k
    Associate II
    February 3, 2015
    Posted on February 03, 2015 at 15:38

    Check HAL example of UART. Check for F3 or F2 one's. basic concept is same in all.

    pcm-lab
    Associate
    February 6, 2015
    Posted on February 06, 2015 at 12:04

    Hi ramin!

    while (1)  and  IRQ metod -  not very compatible ;)

    If you want to call the reception of the cycle,

    - you ned HAL function HAL_UART_Receive

     (NOT  HAL_UART_Receive_IT ! )

    as example :

      while (1)

      {

        if (HAL_UART_Receive ( &huart2, aTxBuffer, 8, 5000 ) == HAL_OK)

            {

             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

             HAL_Delay(100);

             HAL_UART_Transmit( &huart2, aTxBuffer, 8, 5000 );

             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

            }

    ================================================

    If you want to call the reception of the interrupt

    -use HAL_UART_Receive_IT()

     with

    void USARTx_IRQHandler(void)

    {

      HAL_UART_IRQHandler(& UartHandle);

    }

    check whether this function in the file : stm32f4xx_it.c

    and check - whether this function in the file : stm32f4xx_hal_msp.c

    HAL_NVIC_EnableIRQ(USART2_IRQn);

    ==================================================== 

    pcm-lab
    Associate
    February 6, 2015
    Posted on February 06, 2015 at 12:12

    waclawek.jan +1

    for sure!

    lock in d: \ _ ST_ \ STM32Cube \ Projects \ STM32F401-Discovery \ Examples \ UART

    \UART_TwoBoards_ComPolling     - a simple method

    \UART_TwoBoards_ComIT             - based on interrupts

    \UART_TwoBoards_ComDMA       - DMA on IRQ method

    mikropart
    mikropartAuthor
    Associate
    February 6, 2015
    Posted on February 06, 2015 at 20:09

    hi nazarov

    I edit my code as bellow(I want use of uart interrupt driven receiving):

    //------------------------------------------------------------------------

    UART_HandleTypeDef  huart6;

    int

    main(

    void

    )

    {

        HAL_Init();

        SystemClock_Config();

        MX_GPIO_Init();

        MX_USART6_UART_Init();

        HAL_UART_Receive_IT(&huart6, (uint8_t *)aRxBuffer, 8);

       

    while

    (1)

        {

            HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_SET);

            HAL_Delay(1000);

         }

    }

    void

    HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)

    {

        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_SET);

    }

    and I look at  stm32f4xx_it.c

    that contain bellow code:

    void

    USART6_IRQHandler(

    void

    )

    {

       HAL_UART_IRQHandler(&huart6);

    }

    but  my

    problem(

    not working HAL_UART_RxCpltCallback()

    ) exist.

    do you have any idea?

    thank.

    mikropart
    mikropartAuthor
    Associate
    February 6, 2015
    Posted on February 06, 2015 at 20:28

    and in stm32f4xx_hal_msp.c  I find this code:

    /* System interrupt init*/

        HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);

        HAL_NVIC_EnableIRQ(USART6_IRQn);

    thank