STM32CubeMX串口接收数据(中断方式,HAL库)

发布者:SHow111time最新更新时间:2018-06-19 来源: eefocus关键字:STM32CubeMX  串口  接收数据  中断方式  HAL库 手机看文章 扫描二维码
随时随地手机看文章

系统:linux mint 18.3 xfce 64bit 
软件: 
STM32CubeMX 4.24 
SW4STM32 2.4


开发板芯片:STM32F103RCT6,STM32F407VET6 
实现效果:打开两个串口助手窗口,一个是USART1的,一个是USART2的,任意一个串口(串口1或者串口2)发送数据过去就会马上通过该串口返回来。 
开篇语:

使用STM32CubeMX和SW4STM32具有的优点: 
(1)跨平台开发的优势,win和linux系统都有现成的安装包,安装sw4stm32过程会提升自动安装STLINK驱动 
(2)版本升级积极,我觉得这是一个好现象,说明开发者很重视 
(3)最重要的是免费!!!不用到处找破解激活


(1)使用STM32CubeMX在Pinout配置好TIM3,PA8、PD2(LED灯)、USART1、USART2,

这里写图片描述

(2)时钟配置保持默认 
这里写图片描述

(3)设置TIM1时钟,效果是1s进入一次中断 
这里写图片描述

(4)USART1、USART2波特率等置保持不变,设置NVIC,如下图,注意优先级 
这里写图片描述 
这里写图片描述 
(5)然后生成SW4STM32工程 
这里写图片描述

(6)使用sw4stm32打开工程 
在main.c 添加三处代码,具体位置请大家看提示,整个main.c文件太多就不贴了

/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/

uint8_t aTxBuffer[]="*********串口发送数据××××××××××××\r\n";

uint8_t aRxBuffer1[1];      // 用来接收串口1发送的数据

uint8_t aRxBuffer2[1];      // 用来接收串口2发送的数据

/* USER CODE END PV */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

    HAL_UART_Receive_IT(&huart1,aRxBuffer1,1);          // Enable the USART1 Interrupt

    HAL_UART_Receive_IT(&huart2,aRxBuffer2,1);          // Enable the USART2 Interrupt

    HAL_UART_Transmit(&huart1,aTxBuffer,sizeof(aTxBuffer),100);

    HAL_UART_Transmit(&huart2,aTxBuffer,sizeof(aTxBuffer),100);

    HAL_TIM_Base_Start_IT(&htim3);                      // 启动定时器3

  while (1)

  {


  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */


  }

  /* USER CODE END 3 */


/* USER CODE BEGIN 4 */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{


    if(huart->Instance == USART1)   // 判断是由哪个串口触发的中断

    {

        HAL_UART_Transmit(&huart1,aRxBuffer1,1,100);    // 接收到数据马上使用串口1发送出去

        HAL_UART_Receive_IT(&huart1,aRxBuffer1,1);      // 重新使能串口1接收中断

    }

    if(huart->Instance == USART2)

    {

        HAL_UART_Transmit(&huart2,aRxBuffer2,1,100);    // 接收到数据马上使用串口1发送出去

        HAL_UART_Receive_IT(&huart2,aRxBuffer2,1);      // 重新使能串口2接收中断

    }

}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

    if(htim->Instance == TIM3)      // 判断是由哪个定时器触发的中断

    {

        HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);

    }


}

/* USER CODE END 4 */


如果发现无法实现效果,请检查自己的硬件连接是否正确,还有就是检查USB转TTL是否正常,我就遇到了我的USB转TTL竟然能接收STM32发来的数据但是发送不出去数据,折腾了一晚上,第二天换了个串口线测试是正常的



关键字:STM32CubeMX  串口  接收数据  中断方式  HAL库 引用地址:STM32CubeMX串口接收数据(中断方式,HAL库)

上一篇:STM32CubeMX时钟配置详解
下一篇:STM32串口获取氨气传感器数据

推荐阅读最新更新时间:2024-03-16 16:06

STM8S 115200bps 串口中断连续接收出错问题
内部16M晶振误差太大,导致波特率不准,9600bps可以。要想使用115200,就用外部晶振吧。 还有数据寄存器DR中的数据如果没有及时取走(也可能因为波特率不准)导致数据溢出,出现反复中断现像,如在调试时如果暂停时串口上还有数据,再次运行时DR中的数据将一直是某个数据,正常情况下是不会出现的,解决办法就是进中断的时候清OV标志(不能解决根本问题)。
[单片机]
HAL库的官方历程
需求: 我们以前用标准库的时候是一个压缩包,然后压缩包中有官方的历程,我们使用片上资源的时候会去参考查询,但是ST推出HAL库之后搭配的是STM32CubMX自动生成的,我们也需要参考官方历程,这时候就需要HAL库的官方历程。 路径: 1.打开STM32CubeMX,然后电机Help下的Updater Settings 2.找到如下路径: 3.然后顺着刚刚路径后面继续打开如下路径:STM32Cube_FW_G0_V1.2.0ProjectsNUCLEOG070RBExamplesPWRPWR_STANDBY
[单片机]
<font color='red'>HAL库</font>的官方历程
51单片机模拟串口C语言程序代码
/ #include string.h #include stdio.h #include reg52.h sfr16 DPTR = 0x82; typedef unsigned char INT8U; typedef unsigned int INT16U; typedef unsigned char uint8_t; typedef unsigned int uint16_t; typedef unsigned int uchar; typedef unsigned char byte; typedef unsigned int
[单片机]
STM32F103学习笔记——串口通信
在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义函数。如下: int fputc(int ch, FILE *f) // 发送数据 { USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USA
[单片机]
使用STM32CubeMX创建一个USB+FATFS的TrueSTUDIO环境下的工程
一、准备工具 STM32CubeMX软件; TrueSTUDIO软件; STM32F429BI开发板带USB接口一块。 二、USB电路图 从电路图可以看出,只有两个接口与单片机连接,虽然使用的是单片机的高速引脚,但缺少高速芯片(自行科普),只能拿高速(HS)引脚当全速(FS)引脚用。 三、使用STM32CubeMX配置USB及FATFS 1.时钟配置 我这里使用的是高速外部时钟 时钟源是8MHz的晶振 2.USB配置 选择USB_OTG_HS,配置内部PHY为主机 选择USB_HOST,配置IP为MSC(大容量存储设备)模式 3.FATFS配置 选择FATFS,配置Mode为USB
[单片机]
使用<font color='red'>STM32CubeMX</font>创建一个USB+FATFS的TrueSTUDIO环境下的工程
51学习之定时器中断的两种方式——查询和中断
定时器中断可用两种方式处理:查询和进入中断处理。 1.查询 void Init_T0 (void) 定时器初始化 { TMOD = 0x01; TH0 = (65536-65000) /256; TL0 = (65536-65000) %6; EA = 1; ET0 = 1; TR0 = 1; } void Main() 主函数 { Init_T0 (); Speak1 =1; if(TF0==1) 查询中断标志 { Speak1=~Speak1; //TH0 = (65536-65000) /256; //TL0 = (65536-65000) %6; TF0=0; } } 2.进入中断处理 void Init_T0 (void
[单片机]
stm32F4XX之窗口看门狗 HAL库
首先讲一下独立看门狗和窗口看门狗之间的区别。 独立看门狗Iwdg——独立于系统之外,因为有独立时钟,一般是外部低速时钟。主要用于监视硬件错误。 窗口看门狗wwdg——系统内部的故障探测器,采用内部RCC时钟,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。主要用于监视软件错误 1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的。窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器(不受系统时钟限制,即使系统时钟坏了也能工作),窗口看门狗是用的系统时钟
[单片机]
stm32F4XX之窗口看门狗 <font color='red'>HAL库</font>
英特尔计划在2008年推出65纳米嵌入式NOR闪存
英特尔(Intel)公司日前表示,计划在2008年使用65纳米制造过程生产嵌入式NOR闪存芯片。 英特尔闪存产品部总经理Glen Hawk表示,“与手机或者其它消费电子器件相比,大多数遗留下来还在生产的嵌入式设计拥有更长生存周期。” Hawk补充到,用于无线应用的独立NOR闪存已经开始使用65纳米制造过程。 该公司透露,嵌入式NOR闪存采用并口和串口规格。看来,英特尔似乎使用“嵌入式”名称来指一套应用,而非表明NOR闪存是嵌入到一个逻辑芯片中。
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved