【TPMS】- 接收端2

目录

章节介绍

1.接收板源码讲解
  本节开始讲解接收板的源码,先把一些比较边角外围的简单模块讲完,后面来深入细节。
2.源码底层驱动分析1
  本节分析源码底层驱动部分的dalay实现、timer实现、NVIC配置和LED操作代码,都不难。
3.源码底层驱动分析2
  本节分析源码底层驱动部分的i2c、spi、usart等通信外设及自己编写的字符串格式化函数集mysprintf。
4.源码底层驱动分析3
  本节主要分析TDA5235相关的中间层代码,5235底层调用SPI接口,实现STM32主控和TDA5235的互动(主要是配置5235寄存器、读写数据等)
5.源码底层驱动分析4
  本节重点讲述TDA5235收到一包无线数据后产生中断通知STM32,然后STM32在中断处理程序中读取TDA5235的FIFO,从而get到发射板发过来的数据。
6.OLED12864的底层中间层和上层
  本节讲解OLED12864这种显示器的分层和各层作用,对该显示设备有个本质系统的认识。
7.标配OLED12864屏详解
  本节讲解我们项目中用到的OLED12864屏的资料,并且结合代码进行全部理解。
8.入门级功能整个分析
  本节是入门级课程最后一节,分析了整个main函数的流程,有前面的分析打底本节课程非常好理解,水到渠成。

一、接收板源码讲解

1.1、工程一些值得关注的点
(1)工程里C/C++要定义2个宏:STM32F10X_MD,USE_STDPERIPH_DRIVER(使用库函数)

1.2、起始代码和时钟
(1)起始代码
-注释了SystemInit()函数
-使用中断时嵌入式向量中断表的中断入口名字要一致

(2)时钟设置和详细计算
Clock_Init()

1.3、CRC校验
(1)CRC校验原理。参考:http://blog.csdn.net/haifengid/article/details/51753181
(2)CRC校验案例。参考:http://blog.csdn.net/zjli321/article/details/52998468
(3)CRC最清楚的文章。参考:https://zhuanlan.zhihu.com/p/396165368
(4)本案中CRC多项式和初始值的来源和确定

翻译:此函数使用固定多项式 (x8 +x5 +x3 +x2 +x+1) 计算 RAM 中内存区域的 8 位 CRC 校验和。它支持德国汽车工业协会 (VDA) 的标准化 TPMS 数据协议,最适合 119 位及以下的数据字长度。CRC Baicheva 计算从定义的预载荷值开始。VDA 协议要求使用 AAH 的预加载值。

二、源码底层驱动分析1

2.1、delay - SysTick定时器
(1)SYSTICK定时器的定时计算:
  重装载值 = systick时钟频率(Hz) * 想要的定时时间(S)
(2)【STM32】SysTick定时器超链接https://editor.csdn.net/md/articleId=126531492#SysTick_delay_166

2.2、LED
(1)【STM32】LED超链接

2.3、sys - NVIC
(1)【STM32】NVIC超链接

2.4、timer
(1)【STM32】Time定时器超链接

三.源码底层驱动分析2

3.1、iic1
(1)采用GPIO按照IIC协议模拟IIC的时序

3.2、spi

3.3实际项目中如果遇到了SPI、I2C等协议问题,调不出来怎么办
(1)查时序封装函数、查时钟(数据手册)
(2)找不同的参考代码去尝试,尤其和自己的硬件平台很接近的参考代码
(3)实在没招了可以考虑用示波器或者逻辑分析仪来细节看波形查问题
实际项目中使用SPI、I2C是用内部外设硬件式的还是IO模拟的?
(1)能用硬件式的尽量用,更简单、效率更高。
(2)有时候硬件接线就接到普通IO了而不是内部硬件式外设对应的IO。
(3)有时有些MCU内部的硬件式的外设本身是有bug的,不好用。
(4)有些外设的协议不是标准的,而MCU的硬件式内部外设都是标准的

3.4、usart
MDK STM32 半主机模式

3.5、mysprintf
嵌入式linux核心课程的第1部分,ARM裸机全集,里面讲过printf的移植,printf中关键就是spirntf函数。
嵌入式linux核心课程的第4部分,C语言高级专题,这个课程一定要学。

四.源码底层驱动分析3

4.1、TDA5235源码分析
(1)TDA5235源文件+TDA5235_Init()

图1 TDA5235源文件
图2 TDA5235_Init()

(2) TDA5235_Receive_INT_Init()

(3)TDA5235_SFR_Init()
数组 init_data[30][2]由TDA5235的配置寄存器的工具(TDA5240-35-25 Explorer 6.51.0)生成,代表的含义在GUI软件(图形用户界面)配置的一些东西。

(4)TDA5235_Power()
要使能5235前先给P_ON高电平使能内部regulator,禁止5235前先给P_ON一个低电平禁用内部的regulator。

(5)TDA5235_Read/Write_Register()
代码是由官方示例程序得来的,越是典型的应用和基础的东西,一般都会有。
Burst连续读或写,区别于读或写一个字节,通常在时序中会简化时序,同时效率更高。

(6)TDA5235_Read_FIFO
FIFO状态字附加在FIFO SPI传输结束时,显示是否存在溢出,以及传输了多少有效数据位。有效FIFO位数在位位置S0至S5处指示。状态字的 S6 始终未定义
如果读取地址指针超过写入地址指针,则在位置 S7 处的 FIFO 读取状态字的 FIFO 溢出状态位中指示溢出。
如果在溢出后检测到 TSI,则会清除 FIFO 溢出状态位并初始化整个接收 FIFO

(7)EXTI0_IRQHandler()

4.2、接收到RF数据包的处理和解析

五.OLED12864的底层中间层和上层

5.1、OLED屏本身基础知识
(1)OLED和LED和LCD显示器的区别和联系
(2)OLED、LED、LCD屏编程上的差异
(3)所有屏幕内部都有个驱动芯片,这个是关键。对内提供物理控制,对外提供数字接口。
(4)显示屏本质上都是填充GRAM(framebuffer),有字库只是降低了代码劳动量而已。

5.2、底层I2C
(1)底层又叫物理层,核心是二进制传输定义,由屏幕内部驱动芯片决定
(2)主控MCU要以底层兼容的方式和屏幕通信才可以,譬如电平标准、譬如二进制接口协议。
(3)常用的底层协议就是I2C、SPI、UART、并行口、自定义单总线、存储专用如SD、NF接口等

5.3、中间层命令集
(1)中间层调用底层来传输二进制,向上层提供基本服务。
(2)中间层核心就是命令集,由屏幕内置驱动芯片来定义。一般由驱动芯片厂商提供资料给屏幕厂商,屏幕厂商再提供资料给用户工程师。
(3)同类产品的中间层命令集经常非常像,主要是后来的主动向早期的靠拢。
(4)研发中一般直接拿官方示例来用即可,没有问题时不会去下功夫看手册和联系FAE。

5.4、上层用户层
(1)上层就是GUI层,又叫用户层,上层设计是面向产品、面向终端用户的。
(2)上层的实现依赖于调用中间层封装,并最终通过底层物理接口作用于硬件。
(3)屏幕简单产品简单上层就简单,显示点ASCII码、汉字、符号完事。
(4)屏幕复杂产品复杂上层就复杂,尤其有交互需求时,就得GUI框架(譬如QT、uCGUI等)来支持。

六.标配OLED12864屏详解

6.1、驱动芯片手册解读+底层函数
(1)OLED12864的超链接:[SSD1306(OLED驱动芯片)指令详解【翻译版】- CSDN]
(2)IIC_GPIO初始化 + OLED初始化

(3)写数据和写命令函数:

(4)显示(显示步骤) = 显示位置 + 显示数据
设置寻址模式(页寻址)

设置第几个PAGE(页)
设置第几列

写入数据


6.2、项目GUI层解析

(1)字符串显示

(2)数字显示

七.入门级功能整个分析

7.1、SP370传过来数据的解析
7.2、main函数的整个流程和上下联系

注:本资料大部分由朱老师物联网大讲堂课程笔记整理而来

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tyx-☆、、、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值