查看: 2008|回复: 1

STM32 Nucleo初级例程4:串口驱动实现(中断方式接收)

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 06:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-8 17:27:16 | 显示全部楼层 |阅读模式
    分享到:
    在上一篇文章中,讲解了在STM32-NUCLEO-072RB开发平台上利用软件查询方式实现字符发送和接收的例程。在不加入RTOS时,采用查询方式会占用CPU的消耗,使得MCU的处理效率变低。为了实现多任务运行,在不增加RTOS的方式下,尽量采用中断的方式去处理各种突发事件,主循环中仅执行必要的任务扫描工作。这一篇文章讲解利用中断方式实现串口数据的接收和发送。对于“中断”概念和内容,不做介绍,这里讲解一下cortex-m0内核的NVIC模块和KEIL-MDK工程代码的实现过程。
    一、嵌套向量中断控制器(NVIC
             它与cortex-m0内核有很深的“亲密接触”——与内核是紧耦合的。NVIC提供如下的功能:可嵌套中断支持,向量中断支持, 动态优先级调整支持, 中断延迟大大缩短和中断可屏蔽。它用于整个内核中断的管理,支持32个可屏蔽中断通道(不含M0内核16个中断线)和4个可编程中断优先级(使用2位)。
        在STM32软件包带有的CMSIS软件库函数中,提供了NVIC的相关定义。
       

    每个通道的具体定义如下:

    这些通道的优先级都是固定的,内核中断,具有很高的优先级。不能由软件来设置
    下面这些是32个外设通道,他们的优先级是可以设定的,但所有的优先级都比M0内核中断要低。

    下面看一下,如何利用中断方式实现出串口数据的接收
    二、Keil-mdk工程软件代码实现
    1、Keil-mdk工程模板中加入NVIC.C文件, 在includes.h文件中加入NVIC.H头文件

    2、实现Nvic_Init()中断配置代码



    定义一个结构体变量,然后中断通道设置为串口1,优先级设置为0,在32个外设中断中是最高优先级。
    3、串口接收中断服务函数实现
    stm32f0xx_it.c文件的串口中断服务函数里面,实现MCU接收字符后,根据字符来判定,实现LED灯的开关。

    在串口中断服务函数中,当串口接收到字符0xAA后,就打开LED灯,当接收到字符0xBB后,就关闭LED灯。实现了PC机上串口调试助手控制LED的开关。理解这个思路,当然可以控制MCU搭载或者驱动的任何负载,包括电机正转、反转,电磁阀开关,继电器开关,将串口助手集成到上位机软件中,就是一个完整的控制系统了。
    4、main.c文件代码配置

    将main.c文件中,将NVIC初始化代码加载,并在串口初始化代码中,打开中断接收使能位,就可以实现上述功能了。这样,MCU执行完打印字符后,就进入空循环,等待串口中断发生。
    实现现象如下:



    STM32-NUCLEO-072RB硬件实物连线图如下:

    因为演示电脑不能成功安装ST-LINKV2-1仿真器驱动,只好用外部ST-LINKV2仿真器下载和仿真程序,USB转TTL线是自己制作。
    代码地址链接
    https://www.eeboard.com/bbs/thread-39696-1-1.html
    摩尔吧视频地址链接
    https://www.moore8.com/courses/306
    回复

    使用道具 举报

    该用户从未签到

    发表于 2021-6-12 12:20:53 | 显示全部楼层
    谢谢楼主分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 10:56 , Processed in 0.124672 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.