硬汉嵌入式论坛

 找回密码
 立即注册
查看: 15043|回复: 6
收起左侧

[STM32CubeF4] 【STM32CubeF4教程】第三期:使用STM32CubeMX生成用于STM32-V5开发板的USART工程中

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2015-3-13 09:54:44 | 显示全部楼层 |阅读模式
                                  第三期:使用STM32CubeMX生成用于STM32-V5开发板的USART工程中断方式
本期教程使用STM32CubeMX生成可用于STM32-V5开发板的USART1中断方式的工程,通过本期教程让大家对STM32CubeMX设置外设中断有个了解。
   1.1  STM32CubeMX生成USART工程中断方式配置
   1.2  USART工程验证
   1.3  完整工程下载
*******************************************************************************************************************************************
1.1  STM32CubeMX生成USART工程中断方式配置
      关于使用STM32CubeMX生成USART工程的方法已经在第二期教程中讲解了,这里就不再赘述了,重点说一下中断配置。
第1步:点击USART1按钮
1.png

然后使能USART中断。
2.png

第2步:设置NVIC的优先级分组以及抢占优先级和子优先级,首先点击选择NVIC按钮
3.png

关于NVIC的优先级分组,抢占优先级和子优先级,大家可以看我们STM32-V5开发板用户手册的第12章。
6.png

设置完记得点击OK进行保存。通过上面两部USART的中断方式就算设置完了,剩下就是生产相应的工程,具体方法参考第2期教程。
1.2  USART工程验证
       STM32CubeMX生成的工程如下:
1.png

生成工程后,用户只需添加简单的代码就可以通过开发板上面的串口打印数据,这里我们添加几行简单的代码
实现每100ms发送字符串"www.armfly.com"
****************************************************************************************************
#include "stm32f4xx_hal.h"
#include "usart.h"
#include "gpio.h"


#define RXBUFFERSIZE  20                            /* 以下三行用户添加 */
extern UART_HandleTypeDef huart1;
uint8_t aTxBuffer[] = "www.armfly.com\r\n";


/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);


int main(void)
{
  /* MCU Configuration----------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();


  /* Configure the system clock */
  SystemClock_Config();


  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();


  while (1)
  {
      HAL_UART_Transmit_IT(&huart1, aTxBuffer, RXBUFFERSIZE);    /* 以下两行用户添加 */
      HAL_Delay(100);  
  }
}
****************************************************************************************************
添加完后,配置下工程下载选项就可以将代码下载到STM32-V5开发板运行,需要配置的位置
有如下几项:
1.png

2.png



配置好后,千万记得点击确定,这样就可以点击MDK上面的load图标下载到开发板。
3.png


下载后,复位开发板,然后USB转串口线连接PC机和开发板。PC机上运行SecureCRT软件,
波特率设置为 115200bps,无硬件流控。从PC机的软件界面观察程序执行结果,结果如下:

4.png


1.3 完整工程下载
usart_irq.zip (5.06 MB, 下载次数: 1228)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
 楼主| 发表于 2015-3-14 09:37:08 | 显示全部楼层
已经整理完,发布。
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2015-3-14 12:06:07 | 显示全部楼层
[s:140] [s:140] [s:140] [s:151]
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

学习学习

积分
10
发表于 2015-3-19 13:21:08 | 显示全部楼层
为啥接收的时候不进中断呀,嘻嘻。咋解决呀?
学习学习
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
 楼主| 发表于 2015-3-20 21:24:05 | 显示全部楼层

回 蝶舞天涯 的帖子

蝶舞天涯:为啥接收的时候不进中断呀,嘻嘻。咋解决呀?
 (2015-03-19 13:21) 
可以进中断的,您遇到的是怎么个情况,也是用的STM32CubeF4吗。
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2015-4-6 20:20:08 | 显示全部楼层
上周六拿到板子,因为有事,今天才开箱,用Cube玩了下,也是进不了中断,后来在使用HAL_UART_Receive_IT以后就可以进了,发送也是,中断方式用HAL_UART_Transmit_IT。瞎捣鼓,第一次接触STM32,坛主能帮忙分析下什么原因不。
/**
  * @brief  Receives an amount of data in non blocking mode
  * @param  huart: pointer to a UART_HandleTypeDef structure that contains
  *                the configuration information for the specified UART module.
  * @param  pData: Pointer to data buffer
  * @param  Size: Amount of data to be received
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
{
  uint32_t tmp = 0;
  
  tmp = huart->State;  
  if((tmp == HAL_UART_STATE_READY) || (tmp == HAL_UART_STATE_BUSY_TX))
  {
    if((pData == NULL ) || (Size == 0))
    {
      return HAL_ERROR;
    }
   
    /* Process Locked */
    __HAL_LOCK(huart);
   
    huart->pRxBuffPtr = pData;
    huart->RxXferSize = Size;
    huart->RxXferCount = Size;
   
    huart->ErrorCode = HAL_UART_ERROR_NONE;
    /* Check if a transmit process is ongoing or not */
    if(huart->State == HAL_UART_STATE_BUSY_TX)
    {
      huart->State = HAL_UART_STATE_BUSY_TX_RX;
    }
    else
    {
      huart->State = HAL_UART_STATE_BUSY_RX;
    }
   
    /* Enable the UART Parity Error Interrupt */
    __HAL_UART_ENABLE_IT(huart, UART_IT_PE);
   
    /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
    __HAL_UART_ENABLE_IT(huart, UART_IT_ERR);
   
    /* Process Unlocked */
    __HAL_UNLOCK(huart);
   
    /* Enable the UART Data Register not empty Interrupt */
    __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
   
    return HAL_OK;
  }
  else
  {
    return HAL_BUSY;
  }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
 楼主| 发表于 2015-4-6 20:36:51 | 显示全部楼层

回 culor 的帖子

culor:上周六拿到板子,因为有事,今天才开箱,用Cube玩了下,也是进不了中断,后来在使用HAL_UART_Receive_IT以后就可以进了,发送也是,中断方式用HAL_UART_Transmit_IT。瞎捣鼓,第一次接触STM32,坛主能帮忙分析下什么原因不。
/**
  * @brief  Receives an amo .. (2015-04-06 20:20) 
第一接触,建议不要搞这个,这个东西还不适合初学者(这么说是因为资料太少了),我在论坛简单的搞了几期也是方便想入门CubeF4的人。

这个我也研究的不深,你再研究研究,网上能查的资料太少了,不好帮你,见谅。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 01:48 , Processed in 0.280529 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表