- 博客(50)
- 收藏
- 关注
原创 keil4和5版本代码编译错误问题
电脑中只有keil5软件, 使用keil5软件打开, 编译后报了一堆错, 还是官方库文件的错误, 这就是版本不兼容了.链接:https://pan.baidu.com/s/1lOfCwZnu2lrGIvNPEZ58LQ。1. 查看有没有驱动, 如果有keil5, 那么此时应该是可以识别到的.: 下载keil4软件, 不要和keil5放到一起. 进行如下操作.4. 匹配flash算法要和调试器保持一致, keil4要手动切换.: 在工作中, 遇到了keil4工程的老代码, 需要烧录到板子中.
2024-05-29 16:27:05
1278
原创 [STM32F407ZET6] GPIO
F4的输出配置和F1的不同, F4的配置后, 施密特触发器将会开启, 还会对输入寄存器进行采样读取. F1的配置后, 推挽输出将会关闭施密特触发器, 开漏模式读取会读输入寄存器, 推挽模式会读取输出寄存器的值.F1的引脚默认功能就那么一个或者两个, 而且只能使用一个, 但是F4的默认功能有很多, 可以让一个引脚复用多个外设, 只需要切换复用的通道就可以了, 提高了集成度.例如: 使用PA2复用3个定时器, 输出PWM波, 非常浪费. 虽然但是, 感觉这个复用暂时没有发现应用的场合.
2024-01-18 22:01:28
798
原创 [STM32F407ZET6] 片上资源介绍
硬件资源可以让我们知道, 这个芯片都有哪些功能, 内存映射让我们知道, 我们的代码存到了哪里, 运行内存在哪里, 外设寄存器在哪里. 了解时钟体系, 是必要的, 时钟是通信的核心, 是单片机运行的心脏, 如果不了解时钟体系, 通信必然会出现不可预估的问题.f4系列的f1系列的不同, F1系列的基本上配置都是正确的, 外接8M晶振就是正确的, F4系列不同, 需要自己配置PLL的倍频. 在system_stm32f4xx.c文件中修改.配置PLL , PLL一旦配置后, 程序运行不可以更改.
2024-01-18 18:45:29
2428
原创 [C语言]时间戳
时间戳就是定义一个时间点作为0秒, 之后每过一秒依此加一, 将当前的时间戳换算成年月日, 再加上起点, 获得的就是现在时刻的时间. 根据地球时区的偏移, 比如北京时间是东八区, 做一个偏移量的加减.时间戳存储器: 现在常见的时间戳存储在32位或者64位整型变量中, 或许是有符号, 或许是无符号. 世界上所有的时间戳(秒计数器)都是一样的, 换算结束再根据时区做偏移运算.printf("星期:%d, 本月第 %d 天, 夏令时标志 %d\n", localTime->tm_wday,//月, 需要手动加1。
2024-01-02 06:37:00
2532
1
原创 [stm32f103]DMA
硬件触发: 如果是外设到存储器中转运. 就需要考虑一些时机, 如转运ADC数据, 就需要每个通道转换完成之后, 进行一次硬件触发DMA, 之后DMA会开始转运. 触发一次转运一次, 这样不会干预其他外设的工作.软件触发: 不用调用函数触发, 用最快的速度, 连续转运, 直到结束(计数器清零). 和自动重装器只能用一个. 用于存储器到存储器的转运, 因为不需要Timing. 最快完成就行. 可以用于所有的地址.数据转运到哪个地址?存储器到存储器的转运, 使用软件触发, 外设到存储器的转运, 使用硬件触发.
2023-12-29 17:49:09
657
原创 FreeRTOS任务调度
开启任务调度器开启任务调度器无参数, 无返回值. 作用是用于启动任务调度器,任务调度器启动后,FreeRTOS便会开始进行任务调度 .如果允许了静态创建任务, 则创建空闲任务和创建定时器任务都会变为需要程序员手动实现创建.1.创建空闲任务(动态创建)创建成功, xReturn = pdPass;
2023-12-28 17:36:39
504
原创 stm32f103系统滴答定时器
SysTick定时器, 是一个24位的定时器, 只能向下计数(n->0). 从RELOAD寄存器中自动重装载定时初值. 24位可以粗略约等于16M个数字.
2023-12-28 14:52:55
1132
原创 学习STM32获取相关资料的官方网站
STM32单片机是ARM公司开发的基于Cortex-M架构的内核, 所以需要下载内核相关文档要来这里!这些文档都可以下载!
2023-12-28 10:59:41
2637
原创 FreeRTOS列表和列表项源码详解
还记得列表项中有一个分配的数值, xItemValue, 就是根据这个来进行升序插入. 此时的列表项里面已经有内容了, 比如阻塞态的列表项, 它的xItemValue就和任务延时的时间有关.不管是插入, 还是删除, 都可以看出来, 列表并没有对列表项中的pvOwner进行操作, 这个挂载的才是真正的数据, 具体的操作, 是任务来进行的. 列表只是提供了一个数据存储结构.尾插是一种无序的插法, 此时两种情况的插法, 都和pxIndex有关, 插入到pxIndex的前面, 并不一定是列表的最后.
2023-12-27 06:47:17
392
原创 [软件] Image2LCD v4.0
每一个像素点需要用16位来表示, 分别是RGB, R: 5位 G: 6位, B: 5位, 共两个字节.通过打开图片, 可以提取图片的像素特征, 生成.c文件, 或者二进制文件等, 提供人们根据需要选择.tftLCD180显示屏, 官方给的参考代码, 需要如下所示设置.
2023-12-21 21:32:46
1533
原创 FreeRTOS的heap文件
在动态创建任务的时候, 只需要提供一个任务句柄, 内存的分配, TCB的分配, 都是系统来进行的, 也是这个文件做的工作. heap文件一共有5个, 都是内存管理文件, 工程只需要一个就行, 这五个的内存分配方法都不一样.heap2: 实现了malloc和free功能, 使用了最佳匹配算法, 但分配几次, 再释放之后, 不能合并相邻空闲内存, 全部内存都变成了内存碎片, 全部不能用了.(不用)heap5: 和heap4分配内存和释放算法是一样的, 增加了可以管理多块, 分隔开的内存, 如果嵌入式系统中,
2023-12-20 12:58:00
553
原创 [FreeRTOS] 创建动态和静态任务 / 删除任务 / 临界保护 / 任务栈分配不足
由系统动态分配任务所需要的内存空间, 简单, 方便, 灵活, 节省空间.由程序员自己定义空间大小, 不易产生内存碎片.缺点: 任务删除无法回收内存.缺点: 容易产生内存碎片.
2023-12-20 12:31:19
850
1
原创 [FreeRTOS] 初识FreeRTOS
五、栈一、介绍: 前后台系统, 前台主循环, 后台中断服务函数. 无法做到实时性高, CPU的工作被大量的浪费在延时中.: 简单, 免费, 开源, 可裁剪. 实时性高, 充分利用CPU资源.二、任务调度器FreeRTOS任务调度器, 并不是硬件层面, 而是软件层面实现的, 它的工作内容是: 使用相关的调度算法来决定当前需要执行哪个任务. FreeRTOS支持三种调度方式: 抢占式调度, 时间片调度, 和协程式调度.2.1 抢占式调度。
2023-12-20 10:30:29
1426
原创 [软件] Beyond Compare4
文件夹比较, 文本比较, 合并等非常有用的软件, 尤其是在对比代码上面, 有时候很难找到自己的代码和别人的代码到底哪里出现了区别, 这个软件就非常有效了.
2023-12-18 09:28:57
452
原创 [C语言] 使用数组模拟实现malloc
为什么使用longlong类型强转, 因为在VC编译器中, longlong类型是8个字节, 64位电脑内存地址也是8字节, 只能用这个来进行运算, 如果是32位机器, 那么使用int就行了.代码如下, 只能模拟实现malloc但是无法实现free, 这里只是随便写写如果是只使用一次这么写也对.
2023-12-17 10:30:59
541
原创 [C语言] “变量的完整定义“ & “volatile关键字“
volatile的意思是 "易变的" , 在C语言中当使用volatile修饰一个变量时, 即表示这个变量的值随时都有可能发生改变, 因此编译器在编译的时候对该变量的存取操作不能进行优化, 即告诉编译器每次存取该变量的时候都要从内存中去存取而不是使用其之前在寄存器中的备份.// 读取a地址的内容 --> 寄存器x 寄存器x --> 写入b的内存。缺点是无法得到编译器的优化, 增加CPU的执行时间, 影响效率, 因此在不需要优化的地方, 不要使用volatile关键字.
2023-12-17 08:26:26
602
原创 keil5软件调试stm32f103代码失灵问题
打开软件调试, 然后填好正确的DLL和参数即可. stm32就填入这个就可以了.在keil软件中, 更换了芯片型号之后, 导致软件不能正常调试.
2023-12-16 15:44:11
854
原创 keil5自带“串口模拟器“调试打印(stm32)
打开软件调试 代码编写串口程序 开始编译 view菜单->serial Windows -> uart1 # -> 全速运行
2023-12-15 13:50:36
7080
1
原创 FreeRTOS下载、文件说明、编译Demo、工程移植
打开Demo目录下的keil历程, 保存为keil5, 编译通过.FreeRTOS-Plus文件夹, 用不到, 删掉.1. 找到FreeRTOS官网.2. 点击下载FreeRTOS按钮。FreeRTOS文件夹下面。Tools文件夹, 删掉。3. 点击下载按钮。
2023-12-15 10:58:00
2036
原创 stm32f103软件I2C通信
起始信号-> 从机地址+写位(0为写1为读)->接收应答->发送读入地址->接收应答->起始信号->从机地址+读位->接收应答->读取数据->发送非应答->停止信号。一主多从: 主机权利: SCL完全控制权, 空闲状态下, 主机可以主动发起对SDA的控制, 只有从机发送数据, 从机应答时, 主机才会转交SDA的控制权给从机.数据发送和接收的时候, 是高位先行, 即: 0b1010 1100, 实际发送顺序是先发送1->0->1->0->1->1->0->0.//发送应答信号,0应答,1非应答。
2023-12-15 05:36:57
1435
原创 stm32f103和407位带操作
位带操作: 直接对寄存器某一位进行赋值操作. 如: GPIO外设中, A口的第一个输出寄存器想要输出1, 使用位带操作可以直接赋值1.只有GPIO端口的输入和输出作用比较明显, 其他的作用不大.
2023-12-14 06:39:34
1310
原创 Source Insight 4 好用的代码阅读编辑器
它支持所有编程语言, 会将头文件, 函数名, 全局变量, 宏, 都会显示在左面. 工程文件显示, 函数定义的位置。
2023-12-13 05:54:16
438
原创 stm32f103的USART通信
简介简介USART英文名字: Universal Synchronous/Asynehronous Receive/Transmitter.最少需要3根线, GND, RX(接收), TX(发送). 当只需单向数据传输时, 可以只用一根通信线, 当电平标准不一致时, 需要加电平转换芯片.全双工(发时收,收时发), 异步(不需要时钟线), 单端(必须共地), 点对点(1对1)通信.通信协议: 制定通信的规则, 通信双方按照协议规则进行数据收发.串口参数一帧数据有10/11位.
2023-11-22 08:39:42
1653
原创 stm32f103输入捕获
简介简介输入捕获功能同样只有高级/通用定时器才具有.输入捕获英文名字为Input Capture. 是定时器外设另一个大的功能, 与输出比较OC共用CCR寄存器, 因此一个定时器只可以使用一种功能, CCR(Capture Compare Register捕获比较寄存器).信号输入引脚出现指定电平跳变时, 当前CNT的值将被锁存到CCR中, 可用于测量PWM波形的频率, 占空比, 脉冲间隔, 电平持续时间等参数. 这里我们将使用PWMI模式, 捕获上一节产生的PWM波, 来测量频率占空比.
2023-11-19 14:08:46
974
原创 stm32f103输出PWM波
pwm波是定时器输出比较模块的具体实现, 由软件控制GPIO口的模拟高低电平的转换, 也可以实现, 但是占用太多CPU资源, 产生的pwm波不稳定, 所以由硬件电路来实现.TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//配置输出比较单元。
2023-11-16 17:04:06
1746
原创 stm32f103标准库定时器定时中断
软件定时及缺陷软件定时及缺陷软件定时就是使用循环, 执行一个空指令, 或者一个无意义的指令, 每条指令计算机执行的时间是一定的. 知道指令的具体执行时间, 然后设置循环次数就可以得到一个准确的时间.缺陷: 消耗了大量的资源, 去让系统CPU一直在疯狂跑无意义的指令.
2023-11-16 15:18:12
800
原创 stm32f103标准库按键外部中断
按键按下会触发抖动, 原因就是两个金属弹片快速碰撞来的抖动, 造成信号的抖动, 旋转式的老式风扇开关会出火花也是这个原因, 不能瞬间的充分接触导致的. 软件消除抖动就是使用延时函数, 硬件的消除抖动并联电容, 利用电容的滤波特性. 这里选择延时消除抖动.需要打开外设GPIO, AFIO, 两个. 查看源代码竟然发现EXTI和NVIC竟然不属于外设, 不过想想也对, 因为中断不光是为用户来准备的, 还有一部分是系统需要的.NVIC是中断的大闸门, 总开关, 可以配置中断的优先级.
2023-11-16 10:13:10
1090
1
原创 stm32f103标准库按键控制LED
对GPIO输入输出操作. LED灯设置为输出, 按键设置为输入操作, 读取输入寄存器位是否被按下, 按下点亮LED灯.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);根据原理图可以发现, 按键按下会拉低电平, 所以在默认状态下PC1应为高电平.按键按下读取是否为高电平, 高电平说明没按下, 低电平说明按键按下了.分别开启LED灯的GPIO和按键的GPIO时钟。LED灯需要输出模式, 按键为下拉输入模式.
2023-11-16 08:18:43
261
原创 stm32f103rct6片上资源
第二个x代表Flash容量:6-32K,8-64K,B-128K,C-256K,D-384K,E-512K;第一个x代表引脚数:T-36pin,C-48pin,R-64pin,V-100pin,Z-144pin;第二个y代表工作温度范围:6代表-40到85摄氏度,7代表-40到105摄氏度。第一个y代表封装:H-BGA封装,T-LQFP封装,U-QFN封装;stm32f103xxyy命名规则。stm32f103xxyy命名规则。stm32f103rct6详细参数。
2023-11-15 15:01:54
491
原创 逻辑分析仪的使用
软件安装完成自动弹出是否安装驱动, 选择是, 电脑上插上逻辑分析仪, 设备管理器将会自动识别这个.电脑软件使用saleae logic analysis, 网址如下.打开软件, 显示已经连接, 代表成功了, 如下图所示.
2023-11-15 09:05:57
524
原创 STM32f103标准库LED灯闪烁
GPIO_Mode_IN_FLOATING = 0x04, //浮空输入, 引脚电平未知, 容易受到静电干扰.GPIO_Mode_IPD = 0x28, //下拉输入, 引脚被强下拉。{ GPIO_Mode_AIN = 0x0, //不用管,应该是空闲,数据手册也没写。GPIO_Mode_AF_OD = 0x1C, //复用开漏输出。GPIO_Mode_Out_PP = 0x10, //推挽输出。GPIO_Mode_Out_OD = 0x14, //开漏输出。
2023-11-15 07:43:58
485
原创 指数函数与对数函数的条件
指数的情况下,1的任何次方都是1结果为常函数y = 1;对数的情况下为y的x次方等于1, 那么有两种情况, 一种情况就是x=0.y不等于0. 另一种情况就是y=1,x为任意值. 可见在这种情况下, 两者都是常函数, 丧失了对数函数与指数函数作为基本初等函数的代表性.最后一种情况, a<0时. 指数情况下, 将会出现虚数域, 无法在实数坐标表示出来了, 比如当a=-1,根号下-1将无法表示. 对数情况下, 对于正常的推理我无法理解, 但是根据两者是互为反函数, 关于y=x对称, 说明一定得不到函数.
2023-09-02 21:26:54
532
原创 [单片机]旋转编码器
1. 中断中加延时函数: 最简单粗暴的方法, 但是不可以的. 首先在中断里面加延时函数是会有风险的, 随着代码体量增大, 用到的传感器数量增多, 程序容易卡死在中断函数里面. 另一方面, 实际操作下来发现效果并不好, 因为具有了延时, 快速旋转将会体验非常卡顿而且还会出现大量的错误.因为是两个金属片来回摩擦触碰, 产生的高低电平信号, 会产生抖动, 如果是使用外部中断触发或者计数器中断触发, 将会面临很大的问题, 就是转动一次将会产生很多的抖动信号. 解决方法有硬件防抖, 还有软件防抖.
2023-07-13 10:51:00
1657
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅