自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 DCM模块

Autosar DCM模块基础

2023-07-23 10:30:07 567

原创 五、nrf52832-ble-profile(配置文件)

profile1.profile是一种规范,规定了蓝牙与其他蓝牙设备通讯的一般行为(服务)。2.配置文件: 1.标准配置文件:由SIG采纳并使用 2.自定义配置文件3.service(服务):服务是一组特征和通过他们公开的行为的集合4.服务存在与从机中,每个服务代表从机的一种能力。5.特征: 1.声明(必须) 1.特征性质 2.数值句柄:决定访问权限等 3.属性UUID 2.数值(必须) 3.描述符6.数据传

2021-12-22 15:09:40 600

原创 补充:代码编辑器vscode + keil

vscode推荐大家使用vscode作为代码编辑器,对比keil来说会舒服很多1.vscode的C语言编译环境搭建:参考:https://blog.csdn.net/ren648154292/article/details/111151724?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164014275616780265413147%2522%252C%2522scm%2522%253A%252220140713.130102334

2021-12-22 11:48:06 1202

原创 四、nrf52832-蓝牙-定时器任务

蓝牙定时器任务1.定时器: 1.单次定时器:手动重启 2.循环定时器:自动重启 (这里使用的软件APP定时器是以RTC1为核心的)2.定义一个定时器 APP_TIMER_DEF(timer_id);3.定时器定时函数:(实现延时) APP_TIMER_TICKS(ms) (RTC1只能识别tick,该函数可以实现ms到tick的转换)常用定时器函数1.timer初始化函数:app_timer_init()2.创建timer函数: app_time

2021-12-21 16:47:52 1692

原创 补充:nrf52832-ble-广播

示例程序#include <stdbool.h>#include <stdint.h>#include <string.h>/* log日志需要的头文件 */#include "nrf_log.h"#include "nrf_log_ctrl.h"#include "nrf_log_default_backends.h"/* 定时器需要的头文件 */#include "app_timer.h"#include "bsp_btn_ble.h"/* 蓝牙

2021-12-21 15:32:23 617

原创 三、nrf52832-蓝牙-广播的相关知识

广播1.广播的种类: 1.通用广播:可以被扫描,当有连接请求时,会作为从设备进入一个连接 2.定向广播:会占用整个广播信道 3.不可连接广播:不可连接,不可扫描(广播数据) 4.可发现广播:不可连接,但可被扫描2.广播数据报: 1.低字序 2.组成: 1.前导(8bit): 接入地址第一位为0:01010101 接入地址第一位为1:10101010 2.接入地址(32bit):

2021-12-21 14:05:15 1235

原创 二、nrf52832的蓝牙工程模板

蓝牙1.nrf52832的蓝牙程序结构 1.配置log日志 2.配置APP定时器 (使用的是rtc1的软件定时器) 3.电源管理模块初始化 4.蓝牙协议栈初始化 5.GATT和GAP初始化 6.广播初始化 7.服务初始化 8.配置连接参数 9.开启广播 10.启动连接蓝牙示例程序相关资料可以参考官方sdk文件(头文件较多,建议直接使用官方例程修改)1.文件路径:examples\ble_peripheral\ble

2021-12-21 10:44:17 552

原创 一、nrf52832-蓝牙-简介

蓝牙的基础知识1.蓝牙的分类: 1.低功耗蓝牙:BLE 2.经典蓝牙 3.高速蓝牙2.常见的蓝牙设备类型: 1.单模蓝牙:只支持蓝牙低功耗 2.双模蓝牙:即支持双模蓝牙,又支持低功耗蓝牙3.BLE的三大组成部分:控制器、主机、应用程序![在这里插入图片描述](https://img-blog.csdnimg.cn/e4e31bab50c944159f1f3f98a2bcb3ab.png?x-oss-process=image/watermark,type_d3

2021-12-20 09:31:27 1123

原创 十四、nrf52832的pwm

PWM1.pwm的实质也是一个计数器,通过比较数值大小来决定输出电平状态2.nrf52832具有3个pwm模块,每个模块有4个pwm通道(独立)3.pwm计数模式(15位计数器): 1.向上计数:计数到countertop(最大值)自动清零 t(周期) = clk * countertop 分辨率:clk 2.向上向下计数:计数先增加到countertop,在减小到0 t(周期) = clk * 2 * coutertop

2021-12-17 14:55:40 1659

原创 十三、nrf52832的systick

systick1.nrf52832的systick的定时为无中断,阻塞式的2.systick可以实现较高精度的定时(us)systick常见函数1.systick初始化函数:nrfx_systick_init()2.systick ms级延时函数:nrfx_systick_delay_ms(ms)3.systick us级延时函数:nrfx_systick_delay_us(us)systick示例程序#include <stdbool.h>#include <std

2021-12-16 15:37:27 950

原创 十二、nrf52832的RTC(实时计数器)

RTC注意:这里指明的RTC不是实时时钟,而是实时计数器1.nrf52832具有3个RTC实时计数器(RTC0~RTC2)24位2.nrf52832没有系统systick,使用RTC为RTOS的系统调度提供支持RTC的常用函数1.RTC初始化函数:nrfx_rtc_init(&p_instance,&p_config,event_handle)2.使能RTC的tick函数:nrfx_rtc_tick_enable(&p_instance,enable_irq)3.配置

2021-12-16 15:04:38 1417

原创 关于sdkconfig.h文件配置的使用说明

补充说明关于sdkconfig.h使用Keil Configuration Wizard的说明请自行参考此文章:https://blog.csdn.net/qq_15647227/article/details/89297207(注意:这里是针对keil5以上版本)

2021-12-16 11:58:53 1437

原创 十一、nrf52832的SAADC(数模转换器)

SAADC1.分辨率:支持8/10/12位(过采样可达到14位分辨率)使用过采样时,只能使能一个adc通道2.nrf52832具有8个adc通道 单端输入:1个通道 差分输入:2个通道3.满量程范围:0~VDD4.采样值:采样值 = [(vp - vn)* gain * 2^(resolution -m)]/参考电压 vp:为正极电压;vn:为负极电压;gain为增益;m:为0,单端,为1,差分 resolution:分辨率5.工作模式: 1.单次模式

2021-12-16 11:37:09 2259

原创 十、nrf52832的看门狗(watchdog)

watchdog1.看门狗的作用:防止程序跑飞(复位芯片)2.看门狗时钟源:32.768振荡器3.超时时间计算:t = (CRV寄存器 + 1)/32768 秒4.看门狗一旦启动,就无法停止。(可以配置config寄存器在cpu睡眠或仿真器将cpu挂起时暂停)WDT常用函数1.WDT初始化函数:nrfx_wdt_init(wdt_cfg,wdt_event_handle)2.WDT有8个可重装寄存器,申请喂狗通道函数:RR[0]~RR[7] nrfx_wdt_channel_allo

2021-12-15 16:30:36 1243

原创 九、nrf52832的NVIC(非易失存储器flash)

NVMC1.写flash之前必须配置写寄存器CONFIG.EEN=1对flash的扇区进行擦除,否则无法进行写操作(全部置1,页操作)2.配置写寄存器CONFIG.WEN=1 对flash进行写使能。(只能由1写为0)3.flash写入时都是以一个字(32位)对齐到地址上。4.nrf52832具有512kbyte的flash,可分为128页,每页4kbyte;每页分为8个数据块,每块512byte;每个块有128个字。5.写入数据时,cpu会被挂起。NVMC常用函数1.flash擦除页函数:

2021-12-15 14:54:03 1181

原创 六、nrf52832的PPI(可编程外设互联)

PPI1.PPI的作用:提供一个硬件通道,连接事件和任务。当事件触发时,不需要cpu的参与,硬件自行完成任务的驱动。2.PPI通道: 1.EEP:事件端点(1个) 2.TEP:任务端点(2个,主任务+从任务)3.PPI共有32个PPI通道(0~31),其中有12已经被预编译(20~31),其他由用户自主编程。预编译的通道也可进行分组,使用和禁止。4.每一个PPI通道的信号都被同步到16M的时钟上。5.nrf52832共有6个PPI分组(CHG(0)~CHG(5))PPI常用函数

2021-12-15 14:12:05 758

原创 八、nrf52832的temp传感器和random number随机数

temp1.temp传感器的分辨率:0.25℃2.温度传感器初始化函数:nrf_temp_init();3.开启温度传感器:触发start任务 NRF_TEMP->TASKS_START = 1;4.关闭温度传感器:触发stop任务 NRF_TEMP->TASKS_STOP = 1;5.读取温度值函数: nrf_temp_read()/4 (分辨率为0.25℃) 需要等待NRF_TEMP->EVENTS_DATARY事件触发temp示例程序

2021-12-15 10:37:50 1387

原创 七、nrf52832的唯一id与加密解密

ID1.nrf52832芯片都具有一个64位的id号(唯一) 1.用作序列号 2.用作密码进行1加密 3.用于激活带安全机制的自举过程2.id存储位置:FICR寄存器中 id0 = NRF_FICR->DEVICEID[0]; id1 = NRF_FICR->DEVICEID[1];TEA加密算法//加密算法void encrypt (uint32_t* v, uint32_t* k) {uint32_t sum = 0; // 注意sum

2021-12-14 17:12:37 1422 1

原创 五、nrf52832的timer定时器

timer1.定时器的功能:定时(需要配置比较/捕获寄存器的比较值)、计数2.nrf52832具有5个32位的timer定时器3.时钟源: 1.当f < 1MHz,系统自动选择PCLK1M的时钟源(低功耗) 2.当f > 1MHz,系统自动选择PCLK16M的时钟源4.timer的时钟频率可以选择(0-9分频) 无论使用哪个时钟源都是以16M的为基准timer常见函数1.定义定时器实例: nrfx_timer_t timer_instance =

2021-12-14 15:34:24 2240

原创 四、nrf52832的gpioe

gpiote1.gpiote不是简单的gpio,它是在gpio的基础上引入了task和event (task对应的是输出,event对应的是输入)2.gpiote具有8个通道(每个通道可以分配给1个引脚)3.gpiote的task任务(输出): 1.SET:置位任务(1) 2.CLR:清除任务(0) 3.OUT:翻转任务 (任务优先级:OUT > CLR > SET)4.gpiote的event触发方式(输入): 1.上升沿:NRF_GPI

2021-12-14 09:50:39 449

原创 三、nrf52832的uart

UART1.uart的串口引脚 1.p0.08 UART_RX :串口接收引脚 2.p0.06 UART_TX :串口发送引脚 3.p0.05 UART_RTS:串口硬件控制流(输出信号线) 4.p0.07 UART_CTS:串口硬件控制流(输入信号线) (串口一般采用软件控制,8位数据位,1位停止位,无校验) 2.uart的基础配置 1.专门用于初始化串口的宏:APP_UART_FIFO_INIT (封装了app_uart_ini

2021-12-13 17:04:52 3747

原创 二、nrf52832的寄存器与外部资源共享

nfr52832的寄存器1.寄存器类型: 1.任务寄存器(task):由程序或者外部事件触发,用于启动一个任务。 2.事件寄存器(event):外设产生事件时,通过对于的寄存器中断来向cpu提供指示。 3.快捷方式寄存器:当事件发生时,自动触发任务,不需要占用cpu资源,类似于DMA 4.通用寄存器:配置外设 2.外部资源共享 1.nrf52832的每一个外设都都分配了固定大小为0x1000字节的地址空间 2.每个外设的id号从0x40000000开始递

2021-12-13 16:38:32 592

原创 一、nrf52832的gpio及log的使用

gpio引脚定义1.gpio的引脚定义位于pca10040.h文件中2.nrf52832的gpio为p0.0-p0.31gpio的输入输出模式1.gpio的输出模式 1.nrf_gpio_cfg_output(pin_num) gpio初始化为输出模式。 2.nrf_gpio_range_cfg_output(pin_num,pin_num) 连续gpio引脚初始化为输出模式 3.nrf_gpio_pin_set(pin_num)

2021-12-13 09:48:07 1627

原创 SPI通讯

SPI通讯spi通讯比iic通讯快的多数据帧格式有8位或16位触发方式有软件触发和硬件触发两种数据的读取时刻由CPOL(极性)和CPHA(相位)共同决定引脚:SCK:时钟线MISO:主机接收,从机发送MOSI:主机发送,从机接收NSS:片选信号线(低电平有效)程序的基本配置/*使用SPI2进行通讯引脚:NSS-PA2、SCLK-PB13、MISO-PB14、MOSI-PB15SCLK:主模式为复用推挽输出,从模式为浮空输入NSS:使用软件输,普通IO口即可MOSI:主

2021-07-13 08:57:43 646

原创 软件iic协议

软件IIC协议硬件连接时钟线:SCL线(外接4.7K欧姆的电阻)数据线:SDA线(外接4.7K欧姆的电阻)D0线:控制外设的地址SCL、SDA都有普通gpio口代替,通过控制gpio口的输入输出状态来模拟iic的读写过程,这就是软件iiciic的传输数据最高位400kHziic的时序图待机时:SDA线和SCL线都处于高电平启动条件:在·SCL为高电平的状态下,SDA有高电平转变为低电平(下降沿)void iic_start(void){ SDA_Write();

2021-07-11 14:41:00 1092

原创 DMA直接存储器访问

DMA直接存储器访问以存储器 ->外设为例void DMA_InitConfig(){ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_InitTypeDef DMA_InitStruct;DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t) USART1_BASE+0x04 ; //外设地址DMA_InitStruct.DMA_MemoryBaseAddr = (uint3

2021-07-11 14:03:19 330

原创 串口通讯USART

串口通讯USART中断优先级选择static void USART_NVIC_Config(void) {NVIC_InitTypeDef NVIC_InitStruct;/* NVIC初始化结构体 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //优先级分组NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemption

2021-07-11 09:52:47 554

原创 外部中断exit

外部中断EXIT中断的原理不同的硬件对应不同的中断,计算机的中断系统能够加强CPU对多任务事件的处理能力。中断机制是现代计算机系统中的基础设施之一,它在系统中起着通信网络作用,以协调系统对各种外部事件的响应和处理。中断是实现多道程序设计的必要条件。 中断是CPU对系统发生的某个事件作出的一种反应。 引起中断的事件称为中断源。中断源向CPU提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行

2021-07-11 09:16:41 306

原创 系统定时器Systick

系统定时器Systick系统定时器一般用于延时程序程序:void Systick_delay_ms(uint32_t ms){ uint32_t i;/*最高为72MHz,当为72KHz时,计时为1ms当计数值为72时,计时为1us/SysTick_Config(72000);for(i=0;i<ms;i++){ /定时器计数器自减当计数器的值减少到0时,CTRL寄存器的值置1/while(!((SysTick->CTRL) & (1<<16

2021-07-11 08:41:41 956

原创 GPIO的初始化程序

GPIO初始化程序以GPIOA的PIN口为例void GPIO_InitConfig(){ /* GPIOA挂载在APB2总线上,需要开启APB2的时钟才能使用*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_x;(x= 0~15)GPIO_InitStruct.GPI

2021-04-07 08:59:22 4329

原创 GPIO的基本原理

注意:以下内容据来自stm32中文参考手册GPIO端口的寄存器组成1.两个32位的控制寄存器(GPIOx_CRL、GPIOx_CRH)。注意:x代表GPIO的端口组(A、B、C、……)2.两个32位的数据寄存器(GPIOx_IDR、GPIOx_ODR)。3.一个32位的置位/复位寄存器(GPIOx_BSRR)。4.一个16位的复位寄存器(GPIOx_BRR)。5.一个16位的锁定寄存器(GPIOx_LOCK)。(一旦gpio端口锁定之后,再次复位gpio端口时,gpio端口的状态将不会改变)

2021-03-31 14:15:54 2046

原创 C语言的编译过程

#C语言的编译过程1.使用c编译系统提供的预处理器对预处理指令进行处理(.h文件,宏定义等)2.检测C语言文件中程序的语法,若无错误即将源程序转换为二进制的目标程序(.obj文件)3.将所有源文件进行连接处理,生成可执行文件(.exe文件)4.一般需要在文件中编写程序说明文档(readme.txt文件),方便别人阅读5.程序的编写过程最好进行注释,尽量提高程序的可阅读性。6.程序尽量使用结构化编程...

2021-03-30 21:57:59 60

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除