单片机软件
文章平均质量分 66
单片机软件
夜灼华
身后是山川湖泊,眼里满是星河。
展开
-
Bootload远程升级(转)
《前言》 自己曾经的一个车上can总线的项目,因为是项目前期,客户也只是要几个demo件,于是我为了速战速决,做了个不带bootload的样件,没想到的是,客户要了300多的样件,当时发完货,我就知道完了,果不其然,几个月后,出现了一些需求的对接错误及更改,别人主机bootload在线就可以升级,我的没做bootload,于是我被派出去烧程序了!好在那次的工程车没有发往全国各种,不然真的全国飞去烧程序了! 在实际项目开发中,因功能更改或bug修正等原因,需要重新编程是很常见的。但是使用外部编程器又比转载 2021-09-22 09:58:35 · 1406 阅读 · 1 评论 -
stm32的程序在ROM和RAM中是如何运行的/在哪里执行的?
问题:stm32中的Code在程序运行时要不要拷贝到RAM里执行呢?还是直接从Flash中取程序指令执行? 不是nand flash不能运行程序吗?难道32里用的是nor flash?cpu的本质: 处理器基本原理都相似,简单理解都是取指令和数据、执行指令处理数据。那么是从哪里取指令,指令存储在哪?就涉及到存储指令的介质了,这种介质可以是ROM和RAM,两种不同的存储介质,他们都可以做为存储指令的介质。(ROM(Read-Only Memory即只读存储器)可以掉电保存,RAM(random a.转载 2021-09-16 09:52:00 · 5009 阅读 · 0 评论 -
uboot在nandflash和norflash是如何运行的
电子产品如果没有了电,就跟废品没什么区别,是电赋予了他们生命,然而程序则是他们的灵魂。 小时候一直很好奇,一个个死板的电子产品为什么一上电以后就能够工作了呢?为什么一个小小芯片就能够运行我们编写的程序呢?一个开发板从刚上电到整个操作系统能够运行起来是怎么办到的呢?这些东西困扰了好久,参考了好多资料现在才慢慢弄明白其中一些原理。 我们现在接触的大多数电子产品都是使用数字电路设计出来的,数字电路的精髓就是两个数字:0和1,这两个数字千变万化的组合创造了计算机世界的缤纷多彩,不管是cpu、内存还是其他转载 2021-09-16 09:34:17 · 614 阅读 · 0 评论 -
linux系统需要占多大的内存,linux启动过程Bootloader、kernel
256M可以推1080P屏幕Bootloaderkernel转载 2021-09-05 20:05:38 · 2743 阅读 · 0 评论 -
IIC协议的简单介绍与代码
IIC是比较常用的通信协议,比如我们用到的气压计BMP180、EEPROM、MPU60X0(注mpu6000只支持SPI通信协议,有关SPI会在下一篇进行讲解)等IIC设备,百度一大堆,此处不再赘述。直接上干货:特点:IIC通信协议只有两根线,分别是SDA (数据线)、SCL(时钟线),简化了硬件,节约了I/O接口。但是软件就稍微复杂一点(相比SPI);支持主从机制,所有的IIC设备都可以做主机,但是同一时刻只能有一个主机。主机通过发送一个地址信息在IIC总线上与IIC总线上的从机对照,直到找到地址与转载 2021-07-10 10:55:36 · 1133 阅读 · 0 评论 -
电机控制的fast decay与slow decay
关于电机线圈放电的处理方式在快速模式,感性反向电流被释放到电源,当PWM驱动器截止时负载电流快速衰减。这种模式的优势在于,负载电流能快速响应PWM的变化。在快速衰减模式,当PWM驱动器关闭时,负载可以看成被断开,因此不会产生刹车效应。当选择快速衰减模式时,PWM驱动与负载电流非线性。在低PWM占空比时,PWM关断状态,负载电流被完全释放,当PWM再次打开时,负载电流需要从0开始恢复。这样将出现一个大的死区。使用最低的PWM重复速可以被减小这种效应。在一个低的PWM周期内,负载电流得以重建。有时这种非线性可转载 2020-09-25 00:45:32 · 5806 阅读 · 0 评论 -
STM32 的堆栈静态区
STM32的分区从0x2000 0000开始。静态区,堆,栈。所有的全局变量,包括静态变量之类的,全部存储在静态存储区。紧跟静态存储区之后的,是堆区(如没用到malloc,则没有该区),之后是栈区,栈在程序中存储局部变量先看启动文件startup_stm32f10x_md.s的定义:; Amount of memory (in bytes) allocated for Stack; Tailor this value to your application needs; Stack Confi转载 2020-08-11 17:24:17 · 1438 阅读 · 1 评论 -
如何使用 Source Insight4.0 阅读源码
如何使用 Source Insight4.0 阅读源码Source Insight 是一款优秀的源码阅读工具。下面介绍如何进行使用。首先,我们下载Source Insight4.0下载安装并破解后,我们需要导入需要阅读的源码文件在这里插入图片描述https://blog.csdn.net/EthanCo/article/details/88326648...转载 2020-01-07 23:45:13 · 336 阅读 · 0 评论 -
【转载】NRF24L01一对多通信方法程序详解
NRF24L01一对多通信方法程序详解瑞生2015年5月7日学习63586次声明:看本文之前,请确保你可以用NRF24L01进行双向通信,否则看了也白看。如果你还搞不通2个NRF24L01之间的通信,请看瑞生写的这两篇文章《新手如何快速搞通NRF24L01通信》和《NRF24L01中文资料_原理_程序详解》。搞通了2个NRF24L01的互相通信,一对多实际上就非常容易了。你要记住,一对多通...转载 2019-12-24 16:23:25 · 1695 阅读 · 0 评论 -
转【STM32笔记】在SRAM、FLASH中调试代码的配置方法(附详细步骤)
https://zhuanlan.zhihu.com/p/93542349原创 2021-07-09 13:19:02 · 222 阅读 · 0 评论 -
自己定义一个寄存器,寄存一下信息(包含数量的信息)
u8 TIM2CH1_CAPTURE_STA=0; //输入捕获状态 u16 TIM2CH1_CAPTURE_VAL; //输入捕获值 // TIM2CH1_CAPTURE_STA// bit7 bit6 bit5~0//捕获完成标志 捕获到高电平标志 捕获高电平后定时器溢出的次数...原创 2019-12-16 09:46:44 · 430 阅读 · 0 评论 -
定时器里面的中断总结
#define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || ((IT) == TIM_IT_CC1) || ((IT) == TIM_IT_CC2) || ((IT) == TIM_IT_CC3) || ((IT) == TIM_IT_CC4) || ((IT) == TIM_IT_COM) || ((IT) == TIM_IT_Trig...原创 2019-12-16 09:44:33 · 4256 阅读 · 0 评论 -
BKP寄存器
1.BKP_DeInit函数的功能是将外设BKP的全部寄存器重设为默认值。2.BKP_TamperPinLevelConfig函数的功能是设置侵入检测引脚的有效电平。.BKP_TamperPinLevel可取的值有.BKP_TamperPinLevel_High/_Low.分别是检测高低电平。3.BKP_TamperPinCmd函数的功能是使能或失能引脚的侵入检测功能。BKP_Tamper...转载 2019-12-13 11:06:08 · 2642 阅读 · 0 评论 -
独立看门狗(IWDG)与窗口看门狗(WWDG) 的解读与时间计算
独立看门狗(IWDG)Tout=((4×2^prer) ×rlr) /32Khz独立看门狗由内部专门的 32Khz 低速时钟(LSI)驱动。其中 Tout 为看门狗溢出时间(单位为 s);prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;(4×2^prer)整体为实际预分频值,预分频值可取值为4/8/16/32/64/128/256。rlr 为看门狗的重装载值(IW...转载 2019-12-11 17:23:46 · 5058 阅读 · 5 评论 -
stm32的NVIC
一、外部中断叙述1、STM32的每个IO都可以作为外部中断输入。2、STM32的中断控制器支持19个外部中断/事件请求:线0~15:对应外部IO口的输入中断。线16:连接到PVD输出。线17:连接到RTC闹钟事件。线18:连接到USB唤醒事件。3、每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。从上面可以看出,STM32供IO使用的中...转载 2019-12-11 16:46:06 · 307 阅读 · 0 评论 -
STM32自建立一个寄存器,自己赋值。以原子串口为例子。
1. 定义数组2.定义3. 对数组做操作USART_RX_STA|=0x4000; //某一位置1 0100 0000 0000 0000USART_RX_STA&=0xF8FF; //某一位清零 1111 0111 1111 11114. 主函数里处理数据...原创 2019-12-11 15:26:16 · 1344 阅读 · 0 评论 -
STM32按键扫描,学习原子
原创 2019-12-11 15:09:01 · 197 阅读 · 0 评论 -
JTAG各类接口针脚定义及含义
JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。一、引脚定义Test Clock Input (TCK) -----强制要求1TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。Test Mode Selecti...转载 2019-12-11 10:51:08 · 494 阅读 · 0 评论 -
第二节 对stm32f10c_rcc.c的学习
1.void RCC_DeInit(void)功能:将RCC外设寄存器重置为默认值注释:该函数不改动RCC_CR中的叠加在内部高速时钟校准上的内部高速时钟调整值 该函数不重置备份域控制寄存器RCC_BDCR以及控制/状态寄存器RCC_CSR例如:RCC_DeInit();2.void RCC_HSEConfig(uint32_t RCC_HSE)功能:配置外部高速晶振(...原创 2021-07-09 13:15:08 · 774 阅读 · 2 评论 -
对stm32f10c_gpio.c的学习
1、GPIO 寄存器每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。GPIOx->CRL :端口配置低寄存器GPIOx->CRH:端口配置高寄存器GPIOx->IDR:端口输入寄存器GPIOx->ODR:端口输出寄存器GPIOx->BSRR:端口位设置/清除寄存器GPIOx->BRR :端口位清除寄存器GPI...转载 2019-12-10 17:04:45 · 370 阅读 · 0 评论 -
short long int char字节数
short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。因此在51单片机(8位)int为2字节 16位 0–65535; char为1位 0-255;...原创 2019-12-10 11:03:27 · 466 阅读 · 0 评论 -
(转)涨姿势,关于类似*(uint32_t*)&GPIOx这样形式的讨论
看了看下面大神的讨论,有些茅厕顿开的感觉,特此搬砖过来void GPIO_DeInit(GPIO_TypeDef* GPIOx){ /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); switch (*(uint32_t*)&GPIOx) { case GPIOA_BASE...转载 2019-12-10 10:31:32 · 2137 阅读 · 0 评论 -
断言机制函数assert_param
在stm32f10x_conf.h寻找到原型如下:#ifdef USE_FULL_ASSERT/** * @brief The assert_param macro is used for function's parameters check. * @param expr: If expr is false, it calls assert_failed function w...转载 2019-12-10 10:12:20 · 185 阅读 · 0 评论 -
IS_GPIO_PIN(PIN)函数解析
其实是判断PIN的地址不为0x00:void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin){ /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_PIN(GPIO_Pin)); GPIOx...原创 2019-12-10 09:42:00 · 5326 阅读 · 2 评论 -
关于STM32标准外设库中的 USE_STDPERIPH_DRIVER, STM32F10X_MD
关于STM32标准外设库中的 USE_STDPERIPH_DRIVER, STM32F10X_MD关于STM32标准外设库中的 USE_STDPERIPH_DRIVER, STM32F10X_MD,在用STM32开发项目中使用stm32标准外设库(STM32F10x Standard Peripherals Library)的时候,我们会在项目的选项(C/C++)中预定义两个宏定义:USE_ST...转载 2019-12-10 09:32:11 · 899 阅读 · 0 评论 -
把STM32F103RCT6的程序改到STM32F103C8T6上的步骤
把STM32F103RCT6的程序改到STM32F103C8T6上的步骤版权声明:本文为CSDN博主「@嵌入式爱好者@」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_35105528/article/details/90702260把stm32f103rc的程序改到stm32f103c8t6上...转载 2019-12-10 09:27:57 · 5749 阅读 · 1 评论 -
STM32代码的启动过程
分享这篇文章,谈一下STM32启动流程。如果读者朋友已经有过汇编相关基础,能够够好理解本文内容。汇编语言是比C语言更接近机器底层的编程语言,能让我们更好的理解和操纵硬件底层。STM32三种启动模式 下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存,这就是所谓的启动过程。 STM32上电或者复位后,代码区始终从0x00000000开始,其实就是将存储空间的地址映射到0x00000000中。三种启动模式如下:●从主闪存存储器启动 ,将主Flash地址0x0800000转载 2021-06-27 07:27:03 · 767 阅读 · 0 评论 -
linux程序的启动过程
启动过程分为三个部分1.计算机硬件启动部分(BIOS)2.引导加载程序启动部分(GRUB等)3.内核启动部分(linux内核)第一部分计算机硬件启动BIOS中的代码负责下面的事情:1.硬件检测,如果发现错误喇叭报警声示意。2.硬件初始化,先初始化显卡,再初始化其它设备,创建BIOS中断向量3.准备外围IO处理程序4.校对硬件配置是否发生变化,如果有变化则更新到CMOS中5.根据CMOS中记录的启动顺序,调用0x19号中断把启动盘的第一扇区(512字节)加载到内存的0x07C00到0x07原创 2021-06-25 00:21:29 · 483 阅读 · 0 评论 -
ubuntu、linux区别
严格来说,Linux并不是操作系统,而是一个操作系统的内核,严谨一些可以说:linux 一般指 GNU 套件加上 linux 内核。Ubuntu基于linux内核的桌面PC操作系统,术语上喜欢称Ubuntu是一个 linux 发行版(因为debian(其实也是一款操作系统) 是 linux 的一个发行版,而 ubuntu 是属于 debian 系列的一个分支,所以…)。...原创 2021-06-23 19:03:45 · 474 阅读 · 0 评论