前言
上一节《一起学nRF51xx 21 - 蓝牙项目工程的初始化流程解读》讲到nordic的蓝牙协议栈是通过SVC来实现APP与协议栈之间通接口调用的,那么如何来实现一个具体SVC调用功能的程序呢,本节将带大家解决这个问题。
示例详解
基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。
本示例所用的最小系统板原理图:
本节工程直接在《STM32 基础系列教程 15 - SPI》一节的工程基础上进行修自以改,大家可以去https://blog.csdn.net/zhanglifu3601881/article/details/89236537查看工程的创建步骤及下载工程源码:
-
-
工程代码
- 在startup_stm32f103xb.s中找到SVC_Handler程序入口,并按下图所示修改SVC_Handler函数:
同时在stm32f1xx_it.c中将函数 void SVC_Handler(void) 整个注释掉:
并在stm32f1xx_it.c中USER CODE BEGIN 1代码区加入如下代友:
C_SVC_Handler实现了对SVC服务号的解析与具体参数解析及对应功能代码执行。
最在在main.c中按下图编写代码:
-
-
编译OK,在程序中加入断点,仿真程序查看对应的结果:
可以看到成功通过SVC调用产生了SVC中断,并在SVC中断中将正确的参数解析得到,并把参数内容写到TEST数组中:
文中源码资料下载,在公众号里给十三发消息:
下载|一起学nRF51xx 22
关注十三公众号