自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 stm32f103zet6笔记1-led工程

1、选择串口调试2、LED0连接到PB5,PB5设置为推挽输出。PE5同理。3、生成成对的.c,.h文件。4、debugger选择j-link。5、connection选择SWD。6、编写bsp_led.c,bsp_led.h文件。7、下载调试,可以看到LED0 500ms闪烁一次,LED1 1000ms闪烁一次。

2024-03-04 20:00:00 412

原创 VSCode

File - preference - settings - extensions - run code configration,将“Run Code Configuration”中的“Run In Terminal"、"Save File Before Run"前面的复选框选中。1.1 安装MinGW并将MinGW的bin路径添加到系统环境变量。1.4vscode安装Code Runner插件。1.3vscode安装C/C++插件。2、设置只搜索.c.h文件。1.2按照vscode。

2024-02-28 09:51:49 936

原创 linux总线设备驱动框架

驱动也会向总线告知自己能够支持的设备的条件(一般是型号ID等,最简单的也可以是设备的名字)。在驱动注册的时候,总线也会遍历注册在其之上的设备,找到其支持的设备(可以是多个,驱动和设备的关系是1:N),并将设备填入驱动的支持列表中。match之后,设备和驱动之间的交互与总线无关。设备会向总线提出自己对驱动的条件(最简单的也是最精确的就是指定对方的名字了),总线就会遍历注册在它上面的驱动,找到最适合这个设备的驱动,然后填入设备的结构成员中。驱动和设备的关系是一对多。驱动和设备都要注册到总线上。

2024-02-28 09:29:54 367

原创 RT-Thread设备驱动框架

I/O设备是input/output设备,串口,定时器,adc,i2c,spi,flash,SD,USB等都是I/O设备。

2024-02-28 09:23:01 435

原创 RT-Thread串口设备开发

【代码】RT-Thread串口设备开发。

2024-02-28 09:22:13 365

原创 RT-Thread PIN设备驱动框架

2、设备驱动框架层定义的PIN设备操作方法如下:2.1 pin_get接口厂商对引脚的定义一般是PA0,PE15,P10,P415等。为了兼容各个硬件平台,设计pin_get函数,该函数的作用是给每个引脚用数字编号,从0开始。比如针对STM32,pin_get函数使PA0-PA15的值为0-15,PB0-PB15的值是16-31,这样各个引脚经过pin_get调用后都返回1个唯一的编号。类似编码的过程。设置引脚接口。有个参数是pin,那么这个函数需要解码,假设pin=0,则需要解析出是对PA0进行操作

2024-02-28 09:21:36 305

原创 RT-Thread内核对象

RT-Thread 内核采用面向对象的设计思想进行设计,内核对象包括:线程,信号量,互斥量,事件,邮箱,消息队列和定时器,内存池,设备驱动等种类。RT-Thread 通过对象容器来管理所有内核对象。对象容器中包含了每类内核对象的信息,包括对象类型,大小等。对象容器给每类内核对象分配了一个链表,该类的内核对象都被链接到该链表上。

2024-02-28 09:21:00 409

原创 IAR使用笔记

view-source browser-source browser操作一遍。

2024-02-28 09:20:26 392

原创 rt-thread led实验

【代码】rt-thread led实验。

2024-02-28 09:19:45 378

原创 C语言打印文件名、函数名、行号、时间信息

_FUNCTION__ or __func__:函数名(字符串)__LINE__:当前打印函数所在的行号(整型数据)__DATE__:当前日期(和系统有关,是字符串)__TIME__:实时时间(字符串)1. 标准库中一些特殊的宏。__FILE__:文件名(

2024-02-28 09:14:27 730

原创 C语言-常用函数

5、取较小值,较大值。

2024-02-28 09:13:18 319

原创 结构体位域保存传感器数据

8个74HC4052共用两个选通引脚,8个输入引脚,一共可以检测64个数字红外传感器。74HC4052的功能表如下,nY0表示所有Y0引脚。产品有64个数字红外传感器,传感器的状态有两种,0或1,使用结构体位域,在节省内存的同时还方便阅读。这个定义在中间层,应用层调用中间层,驱动层负责获取传感器的状态并赋值给这个结构体。

2024-02-28 09:07:39 355

原创 字符的编码方式

例如fontdata_8x16,表示横坐标8个像素,纵坐标16个像素。对于1个字符,用16个字节表示,每个字节对应1行的8个像素点,为1的位表示点亮,0表示熄灭。用2个字节对所有字符编码。ANSI的数值和字符不一一对应。不同的地区有不同的字符集,不同的字符集对同一个编码值显示出不同的字符。用1个字节对字母、标点符号等字符进行编码,每个字符有一个唯一的数值。由于常用的字符不超过127个,所以用1个字节来编码足够了。用3个字节来编码,对所有字符统一编码,一个码值对应一个字符。4、ASCII字符的点阵显示。

2024-02-28 09:06:42 425

原创 大小端模式

超过1字节的数据在内存中存放方式有两种,大端模式和小端模式。大端模式:数据的高字节存放在低地址,低字节存放在高地址小端模式:数据的高字节放在高地址,低字节放在低地址。这里的所说的数据都是超过8位的。大小端模式和处理器、编译器都有关系。ARM芯片都是小端模式。keil c51是大端模式。

2024-02-28 09:02:41 357

原创 单片机调试经验

1、ADC采样时钟小一点,采样周期大一点,adc的转换结果就稳定一点。另外AD采集引脚要有电容接地,作用是滤波,一般是0.01uF。2、PWM驱动三极管再驱动背光LED,频率1k左右即可,频率太快三极管反应不过来。3、锂电池:一般3.5V低电报警。3.4V进入低电保护,只能充电唤醒。

2024-02-28 08:58:59 312

原创 N32G455VE开发笔记一-JLink添加芯片

产品用到N32G455VE,JLink版本是JLink_V644g,没有该芯片,需要添加。用到的资料由厂家提供。所有芯片配置的内容复制到安装路径下的。需要添加的国民技术芯片型号文件。解锁读保护应用程序所需的配置文件。解锁国民技术芯片读保护。文档末尾,点击保存。

2024-02-28 08:44:05 755

原创 C语言-指针

【代码】C语言-指针。

2024-02-27 18:50:17 334

原创 C语言-数组

sizeof(a[0]输出的是数组元素a[0]的大小。sizeof(a)输出的是指针类型的大小。1、数组做函数形参时,数组名是指针。

2024-02-27 18:48:53 377

原创 大厂C语言编程规范总结

1.2、头文件尽量少包含其他头文件,在.c文件包含,不将头文件集中放置在include.h且每个.c文件都包含include.h。等的定义和声明都放置在.c文件,且加static修饰,对外的将声明放置在.h文件。采用动词+名词的结构,使用小写字母,单词间使用下划线分隔开。使用unix风格,单词用小写字母,字母间使用下划线分隔开。1.3、防止头文件被重复包含,格式是FILENAME_H。3.1、多条语句的宏定义用do-while(0)语句。全局变量使用前缀g_,静态变量使用前缀s_1.1、模块内部使用的。

2024-02-27 18:47:40 350

原创 C语言知识点

1、break只能跳出本层循环,如果循环是嵌套的,要逐层跳出,想要全部跳出可以用return。2、continue是跳过当前循环中continue语句后的语句,进行下一次循环条件的判断。3、int (*a)[10]:a是一个指针,指向的类型是int [10]inta[10]: 数组符号比指针符号优先级高,a是一个数组,该数组的元素是int类型int (a[10])(int) a是一个数组,数组元素是int()(int)类型,即是指向函数的指针4、*p++先取值,再加1。

2024-02-27 18:47:11 370

原创 FreeRTOS队列

在阻塞期间,函数会将当前任务挂起,并添加到等待发送队列中,然后解锁队列并恢复调度器。读队列阻塞:读队列时,队列为空,则可以设置阻塞时间,该任务进入阻塞态,队列不为空时自动由阻塞态进入就绪态,超时也由阻塞态进入就绪态。如果满足条件,将数据复制到队列中。队列通常采用先进先出的方式,即FIFO,从队列尾部入队,从队列头部出队。总之,xQueueGenericSend函数用于向队列发送数据,并提供了阻塞和非阻塞的操作方式,以及对任务切换的支持。队列类型有普通队列,二值信号量队列,计数信号量队列,互斥信号量队列等。

2024-02-27 18:37:23 838

原创 N32G430C8开发笔记二-UART驱动开发

E:\tfs\data\smartsafe\N32G430\Nations.N32G430_Library.1.0.0\projects\n32g430_EVAL\examples\USART\Interrupt开发uart1和uart3驱动。Uart1_tx引脚使用PA9,重映射使用AF5,Uart1_rx引脚使用PA10,重映射使用AF5,Uart3_tx引脚使用PB10,重映射使用AF10,Uart3_Rx引脚使用PB11,重映射使用AF10。配置IO的复用功能为UART。4、uart中断响应函数。

2024-01-24 21:00:00 613

原创 N32G430C8开发笔记一-新建IAR工程

如果没有这款芯片,则先安装IAR的芯片支持包。E:\tfs\data\smartsafe\N32G430\6.软件开发套件\PACK\PACK\N32G430 PACK AddOn to IAR Tool V1.0.0。这个芯片没有浮点数运算单元,选择NONE。根据原厂SDK的文件结构在IAR新建相应分组,把各个文件夹的文件加载进去,其中startup文件选择IAR平台的startup_n32g430_EWARM.s。1、新建工程,保存到project文件夹。3、添加头文件路径,选择相对路径。

2024-01-24 16:55:52 536

原创 ringbuffer+log方式的调试串口

调试串口使用查询方式发送,发送buffer采用环形buffer,打印信息包含文件,函数名和行数。可以在中断中打印调试信息。

2024-01-02 21:00:00 720

原创 适用于单片机的ringbuffer

附件是源码。

2023-12-29 21:00:00 369

原创 使用DWT实现us级延时

它有一个32位的寄存器叫CYCCNT,它是一个向上的计数器,记录的是内核时钟运行的个数,内核时钟跳动一次,该计数器就加1,精度非常高。Cortex-M3,M4,M7内核有一个外设叫DWT(Data Watchpoint and Trace),用于系统调试及跟踪。1、使能DWT外设,由内核调试寄存器DEMCR的位24控制,写1使能。2、使能DWT的CYCCNT计数器,由DWT->CTRL的bit0控制。当CYCCNT溢出之后,会清0重新开始向上计数。3、获取计数值DWT_CYCCNT。

2023-11-15 21:00:00 112

原创 SPI调试记录

两个MCU通过spi通信。N32G455VE是主机,MIMXRT1064是从机。业务流程由从机发起,当从机需要发起业务时,通过1个外部中断引脚通知主机,由主机发起spi通信。N32G455VE使用SPI2,GPIOD2。DMA1 channel5中断响应。DMA1 channel4中断响应。GPIOD2设置为外部中断输入引脚。SPI2 DMA发送配置。SPI2 DMA接收配置。

2023-10-07 18:59:08 112

原创 软件版本号定义在flash固定地址

编译发现版本号没有编译进bin文件,经排查,原因是bootVer未使用,被编译器优化,编译器是IAR。在main中加入下面代码,编译后在bin文件的 0x0800FFE0 地址处看到软件版本号。bootloader的软件版本定义在0x0800FFE0。MCU是N32G455VE,bootloader地址是。

2023-08-30 18:58:32 124

原创 LED驱动

产品有4个LED,用作指示作用。LED有3种状态,亮,灭,闪烁。在驱动层,LED之间互不干扰,但是在业务中,可以让某LED亮的同时其他LED灭。业务是多变的,但是驱动是不变的。

2023-08-28 19:49:49 37

原创 C语言-结构体

考虑结构体数组 struct s2 a[4],就不能满足数组 a 的每个元素的对齐要求。假设数组的起始地址为 x,则每个元素的地址分别为 x、x+9、x+18、x+27,有三个元素不满足对齐原则。由此,编译器会为结构 s2 分配 12 个字节,最后三个字节是补充的空间(浪费的空间),即在结构体的末尾增加填充。要正确计算这个结构体的大小,需要这样考虑:创建这个结构体的数组,每个数组元素都会满足它的对齐要求。对齐原则:假设结构体成员大小是m字节,其地址是m的倍数。32位单片机,IAR编译器仿真结果是9。

2023-08-25 22:00:00 185

原创 JLINK打印调试信息

4、实现RTT功能的关键在于JLinkARM.dll,在调试模式时会加载JLinkARM.dll,JLinkARM.dll会创建1个telnel服务器,监听端口是19021,所以可以用第三方telnel软件,如XSHELL,Secure-CRT等软件来查看打印日志更方便。3、打印参考Main_RTT_PrintfTest.c文件,该文件路径是C:\Program Files (x86)\SEGGER\JLink_V644g\Samples\RTT\Examples。

2023-08-22 23:01:50 436

原创 VSCode离线安装 CodeLLDB 包

【代码】VSCode离线安装 CodeLLDB 包。

2023-08-22 21:30:00 1404

原创 VSCode测试demo

【代码】VSCode测试demo。

2023-08-22 20:15:00 84

原创 搭建VSCode开发环境

将“Run Code Configuration”中的“Run In Terminal"、"Save File Before Run"前面的复选框选中。安装Code Runner插件。5、设置vscode。

2023-08-22 20:00:00 58

原创 提高浮点数运算速度

R/1000E=587G/1000R/4096E=2404G/4096R)>>12E=(2404G)>>12。

2023-08-20 20:48:24 256

原创 可重入函数

在一个多任务环境中,一个函数如果可以被多次重复调用,或者被多个任务并发调用,函数在运行过程中可以随时随地被打断,并不影响该函数的运行结果,我们称这样的函数为可重入函数。相反,如果一个函数不能多次并发调用,在执行过程中不能被中断,否则就会影响函数的运行结果,那么这个函数就是不可重入函数。

2023-08-20 20:42:54 55

原创 Modbus-CRC16查表法

Modbus-CRC16的初始值是0xFFFF,多项式是0x8005。

2023-08-20 20:10:20 399

原创 rt-thread串口实验

可以看到串口打印的消息。

2023-08-14 19:54:55 60

原创 RTT搭建开发环境

2、安装RT-Thread Studio。1、安装stm32cubemx。

2023-08-14 19:13:17 57

原创 安装CCS7.4

如果没有安装仿真器驱动,就加载工程,编译会报错。在Win10下自动安装驱动,也会报这个错误,原因是没有安装到CCS7.4目录下。5、安装仿真器驱动SEED-XDS560v2 Driver,安装到CCS7.4目录下。

2023-08-14 19:08:32 596 1

资源名称:bsp-led源文件

资源名称:bsp-led源文件

2024-03-04

资源名称:bsp-led头文件

资源名称:bsp-led头文件

2024-03-04

DAC5347驱动源码

DAC5347驱动源码

2024-02-20

MIMXRT1064DVL6A软件开发笔记

MIMXRT1064DVL6A软件开发笔记

2024-01-03

ringbuffer+log方式的调试串口

ringbuffer+log方式的调试串口

2024-01-02

ringbuffer+log方式的调试串口

ringbuffer+log方式的调试串口

2024-01-02

ringbuffer+log方式的调试串口

ringbuffer+log方式的调试串口

2024-01-02

适用于单片机的ringbuffer

适用于单片机的ringbuffer

2023-12-29

适用于单片机的ringbuffer

适用于单片机的ringbuffer

2023-12-29

source insight4.0

source insight4.0

2023-08-22

source insight4.0

source insight4.0

2023-08-22

RT-Thread PIN设备驱动框架

RT-Thread PIN设备驱动框架

2023-07-13

IAR 注册机

IAR FOR MSP4300注册机,可用于EW430 7111,分享给需要的朋友使用。

2018-06-27

空空如也

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

TA关注的人

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