stm32f103c8t6的外部中断

这篇具有很好参考价值的文章主要介绍了stm32f103c8t6的外部中断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在单片机中存在着中断系统,这个系统的逻辑和功能在51单片机中已经有所了解。

1.在32单片机中的内核有一个nvic 里面存放许多优先级的设定,外接许多中断源,比如“exti、tim、adc、usart等”接入之后,nvic再通过中断优先级进行排队,再内接入cpu中进行处理,这样子大大减少了cpu的运算,提高了工作效率。

2.其中里面的优先级又有响应优先级 抢占优先级,响应的可以进行优先排队(插队),而抢占可以进行中断嵌套。

3.exti外部中断,注意在支持的gpio口中,不能选择pin相同的来同时触发,比如pa1不能与pb1等等。

4.在外部中断的结构中,有一个afio中断引脚选择,就是一个选择器,用来选择是那个引脚触发。触发方式有上升沿、下降沿、双边沿、软件触发。

5.在exti框图中,当接入的线,可以选择上升、下降来选择触发,出来的值与软件中断事件寄存器进行相或(有1则为1)。出来的值,兵分两路,其一接入请求挂起寄存器,出来与中断屏蔽寄存器共同相与,则中断屏蔽给1,则输出请求挂起的值,给0,则直接输出0。

stm32f103c8t6外部中断,stm32,单片机,嵌入式硬件stm32f103c8t6外部中断,stm32,单片机,嵌入式硬件

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

代码部分

#include "stm32f10x.h"                  // Device header

uint16_t CountSensor_Count;

void CountSensor_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //注意GPIOB是APB2的外设
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);   //注意AFIO是APB2的外设 
    
    //EXTI和NVIC外设的时钟是一直打开的,不需要打开了,NVIC属于内核外设,均不用开启时钟
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   //外部中断:浮空、上拉、下拉输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    //配置AFIO
    
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14); 
    
    //配置EXTI
    
    EXTI_InitTypeDef EXTI_InitStructure;                 //起个变量名 同GIPO一样
    EXTI_InitStructure.EXTI_Line = EXTI_Line14;          //指定配置的中断线  14对应pin14
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;            //指定中断线的状态  ENABLE开启中断
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  //指定外部中断的模式 EXTI_Mode_Interrupt中断模式 EXTI_Mode_Event事件模式
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
                     //触发信号的有效边沿 EXTI_Trigger_Rising上升沿 EXTI_Trigger_Falling下降沿 EXTI_Trigger_Rising_Falling双边沿
    EXTI_Init(&EXTI_InitStructure);//初始化
    
    //配置NVIC
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//指定中断优先级分组,2组即是2响应2抢占,整个工程(芯片)只需要一种即可
    
    NVIC_InitTypeDef NVIC_InitStructure;                      //起个变量名 同GIPO一样
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;      //指定中断通道
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           //指定中断通道是使能还是失能
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //指定抢占取值范围,即是优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        //指定响应取值范围,即是优先级
    NVIC_Init(&NVIC_InitStructure);//初始化
}

uint16_t CountSensor_Get(void)
{
    return CountSensor_Count;
}

void EXTI15_10_IRQHandler(void)      //中断函数
{
    if (EXTI_GetITStatus(EXTI_Line14) == SET)   //中断标志位判断,因为EXTI_Line10-EXTI_Line15都能进来,判断是否14进来
                                                  //如果是等于set(1),则可以进入中断程序
    {
        /*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
        {
            CountSensor_Count ++;
        }
        EXTI_ClearITPendingBit(EXTI_Line14);      //清除中断标志位
    }
}
======================================

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "CountSensor.h"

int main(void)
{
    OLED_Init();
    CountSensor_Init();
    
    OLED_ShowString(1, 1, "Count:");
    
    while (1)
    {
        OLED_ShowNum(1, 7, CountSensor_Get(), 5);
    }
}
 

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

补充

stm32f103c8t6外部中断,stm32,单片机,嵌入式硬件

 上图可以看到APB2总线可以连接的外设

介绍一下相关函数:

void GPIO_AFIODeInit(void);复位AFIO

void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);锁定GPIO,

void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);           配置事件输出

 void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

用来进行引脚重映射,参数1选择重映射方式,参数2是新的状态 。


void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

调用此函数,可以配置AFIO的数据选择器,选择中断引脚,参数1可以选择GPIOA-G,参数2选择pin0-15。

=========

exti

void EXTI_DeInit(void);调用这个函数,可以清除exti的配置,恢复上电默认状态

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);初始化

void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);调用之后,可以把参数传递的结构体变量赋一个默认值

void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
软件触发外部中断,参数给指定的中断线

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);读写状态寄存器
void EXTI_ClearFlag(uint32_t EXTI_Line);
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);文章来源地址https://www.toymoban.com/news/detail-706340.html

到了这里,关于stm32f103c8t6的外部中断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机】STM32F103C8T6 最小系统板原理图

    STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,由STMicroelectronics(ST)公司生产。它是STMicroelectronics的STM32系列微控制器中的一员,被广泛应用于嵌入式系统和电子设备中。 STM32F103C8T6单片机的主要特点和资源包括: 内存资源: Flash存储器:64 KB SRAM(静态随机访问存储器

    2024年02月12日
    浏览(15)
  • [初学单片机]stm32f103C8T6最小系统板快速完成点亮led灯

    目录 一、准备工作 二、建立工程模板 三、配置keil5 四、程序 五、程序下载(烧录)  六、总结 ① keil5,自行下载安装; ② 库函数包,这里我上传了一个F1xx的库函数包,可以在建立工程模板的时候用到;1,STM32F1xx固件库.rar - 蓝奏云 ③ STM32F103C8T6最小系统班,淘宝十几块;

    2024年02月01日
    浏览(21)
  • 基于STM32F103C8T6单片机的1秒定时器设计与应用

    标题:基于STM32F103C8T6单片机的1秒定时器设计与应用 摘要: 本文主要探讨了如何在STM32F103C8T6微控制器上利用内部定时器实现精确的1秒钟定时功能,并通过实际项目实施,验证其稳定性和可靠性。首先介绍了STM32F103C8T6单片机的特性及其定时器资源,然后详细阐述了基于TIMx(

    2024年01月18日
    浏览(20)
  • 【单片机】STM32单片机,RTC实时时钟,STM32F103C8T6,程序,万年历,数字时钟

    我以STM32F103C8T6为例,但STM32F103的RTC是通用的,STM32F103C8T6有一个原理图: https://qq742971636.blog.csdn.net/article/details/131288390 用纽扣电池给VBAT供电(要共地),即可实现掉电后依旧走时的能力。 主要特性(来源于STM32中文参考手册V10.pdf): 记得加标准库文件: 串口接收:

    2024年02月11日
    浏览(18)
  • FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)

    学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。 注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习,也可以通过Proteus仿真的方式进行学习。 后续文章会同时发表在个人博客(jaso

    2024年02月06日
    浏览(26)
  • 舵机控制(STM32F103C8T6)

            本文是以 STM32F103C8T6 作为主控芯片,通过PB6端口输出PWM,实现控制180°舵机。 (一)概述         舵机是一种位置伺服驱动器器,是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只在控制信号持续不变,伺服机构就

    2023年04月09日
    浏览(19)
  • STM32F103C8T6板子介绍

    STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。  STM32F103C8T6 F1XX片上资源

    2024年02月11日
    浏览(21)
  • 功耗测评 | STM32F103C8T6

    STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,外接丰富的传感器、功能模块、通信模块、显示存储等可以形成各种可样的产品项目应用。对于功耗要求比较高的产品,一般会选择STM32L系列的MCU,但是从功耗的评测角度,逻辑上是基本相似的。 在很多应用场合中都对

    2024年02月07日
    浏览(17)
  • STM32F103C8T6系统板

    1.电源部分 2.复位 3.晶振 4. 电源电路——防反接 有关二极管 漫谈二极管防电源反接电路 本次采用上图右下角的NMOS防反接电路。 电源电路——电源芯片 AMS1117是AMS公司的 ,LM1117是NS(美国国家半导体)的,LM1117要贵很多,所以一般的用AMS1117就可以了。 (以下分析参考STM32F10

    2024年02月02日
    浏览(27)
  • STM32F103C8T6串口通信

      首先来看一下需要操作的函数,以及配置的步骤: 图1                                                  图2   Code: usart.c #include \\\"usart.h\\\" void ustart_Init(void ) { GPIO_InitTypeDef GPIO_Init_Ustar ; // 定义输出端口TX的结构体对象 USART_InitTypeDef USTART_Init; // 定义串口初始化结构体对象

    2024年02月16日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包