一、SWI使用

1、学习FreeRTOS过程中需要软件产生一个中断,stm32提供了很好的方法。直接调用EXTI_GenerateSWInterrupt()即可。

二、具体参考如下:

1、exti配置,假定用EXTI_Line2  (EXTI_Linex where x can be (0..19))

#include "exit.h"void ExitConfig(void)
{EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStructure;EXTI_InitStruct.EXTI_Line=EXTI_Line2;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //下降沿触发EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStruct); //初始化中断线参数NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //选择外部中断2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2,NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级 2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道NVIC_Init(&NVIC_InitStructure);
}

2、在需要的地方打开中断: EXTI_GenerateSWInterrupt(EXTI_Line2);

#include "FreeRTOS.h"
#include "task.h"
#include "sys.h"
#include "led.h"
#include "uart.h"
#include "delay.h"#define LED1_GPIO_GROUP                 GPIOB
#define LED1_GPIO_PIN_NUM               (GPIO_Pin_5)
#define LED1_CLOCK_ENABLE               RCC_APB2Periph_GPIOB/*-----------------------------------------------------------------------------** name        :led_init* brief    :led呼吸灯初始化设定,即IO口设定* parameter  :无* return   :无* caller      :外部调用*-----------------------------------------------------------------------------*/
void led_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(LED1_CLOCK_ENABLE, ENABLE);GPIO_InitStructure.GPIO_Pin      =      LED1_GPIO_PIN_NUM;GPIO_InitStructure.GPIO_Speed =      GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode   =      GPIO_Mode_Out_PP;GPIO_Init(LED1_GPIO_GROUP, &GPIO_InitStructure);
}/*-----------------------------------------------------------------------------** name       :led_control()* brief       :控制呼吸灯开关* parameter  :无* return     :无* caller      :led_breath调用*-----------------------------------------------------------------------------*/
void led_control(int led_num, int status)
{led_num = led_num;if(status == LED_ON){GPIO_SetBits(LED1_GPIO_GROUP, LED1_GPIO_PIN_NUM);}else if(status == LED_OFF){GPIO_ResetBits(LED1_GPIO_GROUP, LED1_GPIO_PIN_NUM);}
}
/*-----------------------------------------------------------------------------** name        :led_breath()* brief    :呼吸灯外部调用控制接口* parameter  :无* return     :无* caller      :外部调用*-----------------------------------------------------------------------------*/
void led_breath(void *pvParameters)
{int i = 0;for(;;){        myprintf("led task\n\r");vTaskDelay(1000/portTICK_RATE_MS);if(i % 5 == 0){EXTI_GenerateSWInterrupt(EXTI_Line2);}i++;  }
}

3、stm32f10x_it.c里添加中断处理函数,运行EXTI_GenerateSWInterrupt(EXTI_Line2)后立即进入中断。

extern void myprintf(char *Data,...);
void EXTI2_IRQHandler(void)
{if(EXTI_GetITStatus( EXTI_Line2) != RESET){EXTI_ClearFlag(EXTI_Line2);    //清除中断标志位EXTI_ClearITPendingBit(EXTI_Line2); //清除EXTI线路挂起位myprintf("SWInterrupt in\n\r");}
}

4、main()函数

#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "stm32f10x.h"
#include "exit.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "uart.h"//static const char *pcTextForTask1 = "Task 1 is running\r\n";
//static const char *pcTextForTask2 = "Task 2 is running\r\n";//如果不加强制转换(signed  char*),编译器GCC 会报错
const signed char * const Ledtask =    (signed  char*)"led task";
const signed char * const Lcdtask =    (signed  char*)"lcd task"; //const signed char * const task2 = "Task 1\n";
//const signed char * const task3 = "Task 2\n";
//xSemaphoreHandle xBinarySemaphore;void reset(void)
{ExitConfig();USART1_Config();delay_init();led_init();LcdInit();
}   int main(void)
{   reset();//创建信号量
//  vSemaphoreCreateBinary(xBinarySemaphore);//xTaskCreate(led_breath, Ledtask, configMINIMAL_STACK_SIZE, NULL, 1, NULL);       xTaskCreate(LcdTask, Lcdtask, configMINIMAL_STACK_SIZE, NULL, 1, NULL);vTaskStartScheduler();
}

STM32开发记录一: 外部中断之软中断SWI使用相关推荐

  1. TMS320F28335项目开发记录9_28335之中断系统

    TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...

  2. 一起学mini2440裸机开发(十)--mini2440外部中断实验

    我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表, ...

  3. STM32(3)——外部中断的使用

    1 .简介 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32目前支持的中断共84个(16个内部+68个外部),还有1 ...

  4. STM32学习笔记——EXTI外部中断,光敏传感器控制LED灯

    中断系统 中断:在主程序运行过程中,当出现了特定的中断触发条件,CPU就可以暂停当前正在运行的程序去处理中断程序,并把当前程序的地址压入堆栈,中断程序处理完成后把地址弹出堆栈,回到刚刚暂停的位置继续执 ...

  5. STM32入门笔记03_EXTI外部中断详解+案例:红外对射计数、旋转编码器计数

    EXTI外部中断 中断的相关概念 中断源: 可以引起中断的事件称为中断源 中断: 在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成 ...

  6. [stm32] Start Tour-利用外部中断控制LED亮灭

    如果觉得不错就点个赞吧~ 目录 一  元件相关 二 面包板上的连线 三 具体代码 传感器驱动代码(跟独立按键那个差不多) 中断函数代码(外部中断) main.c 四  最终效果 效果图: 一  元件相 ...

  7. STM32开发记录三: 硬件IIC调试(STHC3温湿度传感器)

    一.STM32_CubeMX配置 /* I2C4 init function */ void MX_I2C4_Init(void) {hi2c4.Instance = I2C4;hi2c4.Init. ...

  8. hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十章 外 ...

  9. gd32f303 设计中断优先级_ALIENTEK 阿波罗 STM32F767 开发板资料连载第九章 外部中断实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第九章 外部中断实验 这 ...

最新文章

  1. Mysql中分页查询两个方法比较
  2. Python开发基础总结之XML+time+OO
  3. 【转】【CUBE】Oracle分组函数之CUBE魅力
  4. git如何忽略已经提交的文件 (.gitignore文件无效)
  5. PyTorch nn.Module 一些疑问
  6. C# 解决串口接收数据不完整
  7. leetcode1536. 排布二进制网格的最少交换次数(贪心算法)
  8. centos普通用户修改文件权限_Linux实战014:Centos创建用户并添加root授权
  9. c语言经典游戏,C语言——经典小游戏——打砖块
  10. AngularJS JetBrains WebStorm简介
  11. 远程桌面工具mRemoteNG与Tsmmc
  12. 微信小程序毕业设计 基于微信小程序评选投票系统开题报告
  13. impala常用函数大全(超详细哦)
  14. 教育系统APP(四)
  15. Android调试出现问题:failed to connect to /10.0.2.2 (port 8080) from /192.168.31.150 (port 37592) after 300
  16. EChart配置--基准线(坐标轴指示器axisPointer)的配置
  17. Android9.0检测摄像头是否存在源码完整案例
  18. 转化医学明星靶点-星型胶质细胞标志物GFAP
  19. DNF 鬼剑士技能设置
  20. 试产机器发现元器件损毁 风险排查过程

热门文章

  1. 安装驱动--20220204
  2. 利用卫星影像进行海岸线提取
  3. iFunk翼巧变革,定义新基准
  4. 因变量 方差膨胀系数_SPSS技术:多重线性回归模型;极端值与多重共线性
  5. shiro和axios的跨域问题
  6. Linux之旅 13:磁盘配额与高级文件管理
  7. JAVA+SQL办公自动化系统(源代码+论文+外文翻译)
  8. 词嵌入 网络嵌入_词嵌入深入实践
  9. python_浅谈python多线程
  10. 数据中心:全面云化的新一代互联网基础笔记