1. 测试环境:STM32C8T6
2. 测试接口:
3. 串口使用串口一,波特率9600
单片机引脚------------CH340引脚
VCC--------------------VCC
GND-------------------GND
PA9--------------------RXD
PA10-------------------TXD
1. 功能:
1. 使用STM32内部falsh进行开机次数记录
2. 通过串口输入密码进行权限的设置
3. 设置唯一硬件标识
2. 移植基础
1. 008_STM32之_keil编译内存大小解析
2. 009_STM32程序移植之_内部falsh
3. 010_STM32程序移植之_lib库建立
3. 前面三个是解析,有了基础之后进行移植
4. 四个文件
5. 第一个是普通串口打印文件
6. 第二和第四个是开机管理的
7. 第三个是密码初始化,就是先刷这个程序进去初始化变量
8. 开始移植
9. 确定串口程序能够使用,能够串口打印和接收数据
10. 开始移植
11. 调用函数检测
12. 程序需要修改的地方就这里
13. 程序编译成功之后先不下载这个程序
14. 我们下载密码初始化这里这个程序,进行变量的初始化
15. 下载之后会打印一些都系出来,这个里面有解析
16. 密码初始化完成之后,我们再下载刚才移植的程序
17. 会有数据打印出来,打印的数据是因为我们前面进行了密码初始化
18. 看现象,我们密码初始化玩之后能够就行开机20次
19. 当开机超过20次之后,程序就卡死在这里了,不能往下运行了
20. 我们初始密码是{123456},当前面四个正确后面两个不正确时候获得临时开机权限
例如:{123420} //获得临时开机权限20次
{123450} //获得临时开机权限20次
21. 在串口中断那里调用串口密码输入
22. 就算重新下载进去也不能进行程序的运行
23. 继续20点,输入密码{123410} 获得临时权限10次,
24. 复位看效果,当临时权限超过10次之后,再次失效
25. 输入正确密码之后可以获得永久权限
26. 临时权限只能输入一次,再次输入就没有用了
关键字:STM32 程序移植 内部flash 开机次数管理
引用地址:
STM32程序移植之_内部flash开机次数管理
推荐阅读最新更新时间:2024-03-16 16:14
stm32 TIM2 重映射
stm32的TIM2的端口使用组合有下面四种: 1.当不重映射时,默认TIM2四个的IO口是PA0、PA1、PA2、PA3 2.要使用PA15、PB3、PA2、PA3的端口组合,要调用下面的语句进行部分重映射: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //重映射必须要开AFIO时钟 GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); 3.要使用PA0、PA1、PB10、PB11的端口组合,要调用下面的语句进行部分重映射: RCC_APB2PeriphClockCmd(RCC_APB2Perip
[单片机]
STM32常见的串行通信接口
通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。 串行通信的分类 1、按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。 2、按照通信方式,分为: 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。 异步通信:不带时钟同步信号。比
[单片机]
STM32 定时器计数器 更新事件
向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。 如果使用了重复计数器功能,在向上计数达到设置的重复计数次数(TIMx_RCR)时,产生更新事件(UEV);否则每次计数器溢出时才产生更新事件。 这样很容易误解 应该是否则每次计数器溢出时都产生更新事件,即不使用重复重复计数功能每次溢出都产生更新事件。 产生更新事件方式 1.设置了TIMx_CR1寄存器中的URS位(选择更新请求),在TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位将产生一个更新事件UEV,但硬件不设置UIF标志(即不产生中断或DMA请求)
[单片机]
工程师STM32单片机学习基础手记(4):用PWM实现荧火虫灯(二)
用PWM生成正弦波
有了PWM,自然就可以用PWM的方法生成正弦波了。下面生成500Hz正弦波的方法参考自张明峰的《PIC单片机入门与实践》
每个正弦波分成四个像限,每个像限16点,共64点,每点出现2个PWM周期,故PWM的周期为:2ms/128=156.25us,频率为64KHz。
TIM3 Frequency = TIM3 counter clock/(ARR + 1)
倒过来:
ARR=TIM3 Counter Clock/TIM3 Frequenc - 1 =562.5-1 =561
如果取ARR的值是561的话,那么实际的频率是64.056KHz,即最终生成为的正弦波频率
[模拟电子]
STM32串口IAP实验中的地址问题
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)和if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)分析 首先要清楚:0x8000000是Flash的起始地址,0x20000000是SRAM的起始地址。jump2app()是一个虚拟函数(函数指针) (*(vu32*)(0X20001000+4))== (*(__IO uint32_t*)(0X20001000+4)) ==(*(volatile unsigned int*)(0X20001000+4)) (*(vu32*)(0X20001000+4)) 通过内存寻
[单片机]
点亮LED(库函数实现)
本次测试采用的芯片是STM32F103CB 我的开发板如下: 此开发板有8个led,分别为D11,D12,D13,D14,D15,D16,D17,D18。查询核心板的电路图后知道其对应芯片的控制引脚为P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7,P0.8。 现在开始测试点亮D11。主要源代码如下: 1 //main.c 2 #include pbdata.h 3 #include led.h 4 5 int main(void) 6 { 7 led_init(); 8 led_setBit(); 9 } 1 //pbdata.h 2 #ifndef _pbdata
[单片机]
Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法
一、、背景: 曾经在工作中接触过STM32一段时间,但没有深入的去学习,只是用前辈搭建好的模型来实现一些功能罢了,俗话说的好,大树底下好乘凉,开发确实轻松了,可是不深究点,又觉着心里不踏实,然而也一直没花时间去深究。刚好,最近需要重新使用STM32,完全自己开发,没想到今天一上来就让我碰上个不小的问题,废话不多说,进入正题。 二、正文: 在使用串口的时候,代码可以正常编译,没有报任何错误,烧录进MCU内,就是看不到程序正常运行的现象,而把串口部分注释掉就没问题。进入调试模式,发现代码停在 BKPT 0xAB 这里,并不是死循环,按下全速运行键“F5”,代码会立马在该段被终止,不会继续往下跑,这里说明了main函数都没
[单片机]
由浅入深尽享STM32标准库开发的乐趣
摘要:从STM32新建工程、编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣。 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题。对于追求开发速度的业务场景下,使用快速配置软件是合理的,高效的,但对于学生的学习场景下,更为重要的是知其然并知其所以然。 以下是学习(包括但不限于)嵌入式的三个重要内容, 1、学会如何参考官方的手册和官方的代码来独立写自己的程序。 2、积累常用代码段,知道哪里的问题需要哪些代码处理。 3、跟随大佬步伐,一步一个脚印。 首先:我们都知道编程时一般查的是《参考手册》,而进行芯片选型或需要芯片数据时,查阅的是《数据手册》。此外市面上所有关于STM32的
[单片机]