单片机

STM32串口下载程序

假如想象 提交于 2020-02-05 21:40:33
STM32 串口下载程序 引言: 如果我们用下载器下载程序很快,很方便,但是需要购买下载器,很破费。为此我们用串口 下载程序,省去了购买下载器的麻烦。 下面介绍用串口下载程序的方法: 所需工具: 串口转 TTL 模块一个,STM32 单片机一个,杜邦线 4 根,mcuisp 软件。 单片机最小系统如图所示: 自制串口下载电路:(自制开发板的时候使用,本文档不使用) 一键下载电路如图所示: 要想了解串口下载电路的工作过程,首先要了解 STM32 的几种启动模式。 STM32 的几种启动模式如下表所示: BOOT1 BOOT0 启动模式 说明 X 0 用户闪存存储器 Flash启动,运行 0 1 系统存储器 串口下载 1 1 SRAM启动 SRAM启动,调试 要想下载程序,必须让 BOOT1=0,BOOT0=1. 运行程序,必须 BOOT0=0; 5.串口和 STM32 的连线: 下面介绍单片机最小系统和串口连接的引脚图: 单片机 串口 A9 RX A10 TX GND GND VCC 3.3v 串口连接图: 芯片连接图: 6.mcuisp 下载软件的使用: 步骤详图: 打开 mcuisp,先执行 1,2,3 步。点击搜索串口,将自动找到电路板串口,在 bps 中选择 波特率为 256000,左下角设置:DTR 的低电平复位,RTS 高电平进 BootLoader。 设置完 1,2,3

zt:单片机常用输出格式--Motorola S-records(S19文件)

时光毁灭记忆、已成空白 提交于 2020-02-05 05:20:21
Motorola S-records 16进制文件格式是嵌入式中除intel hex之外很常见的格式,下面是它的格式: +-------------------//------------------//-----------------------+ | type(hex1) | count(hex 1) | address | data | checksum(从count累加到checksum,总和为0xFF) | +-------------------//------------------//-----------------------+ S0 :标识记录,地址域长度为2个字节,并用0000填充,数据区记录了一些模块名称和版本之类的信息 S1 :数据记录,地址域长度为2个字节,数据区域为数据内容。 S2 :数据记录,地址域长度为3个字节,数据区域为数据内容。 S3 :数据记录,地址域长度为4个字节,数据区域为数据内容。 S5 :统计记录,地址域长度为2个字节,内容是之前数据记录(S1,S2,S3)的个数,数据区域空。 S7 : 运行记录,地址域长度为4个字节,内容是程序启动的地址,数据域空。 S8 :运行记录,地址域长度为3个字节,内容是程序启动的地址,数据域空。 S9 :运行记录,地址域长度为2个字节,内容是程序启动的地址,数据域空。 下面是一个例子,大家看看:

单片机LCD少量汉字显示

依然范特西╮ 提交于 2020-02-03 00:10:39
单片机LCD少量汉字取模显示(不需要字库) 最近在做一个小项目的时候需要用到LCD显示中文汉字,用到的字数不多,如果使用字库占的内存大,而且本人不太熟悉。上网看了一下别人的方法,移植了一下,觉得这个方法不错。后期还可以移植到OLED的显示上,直接可以像显示英文字符串的方法一样显示中文,非常方便: show_Hz32 ( 60 , 160 , "武汉加油" , BLACK , WHITE ) ; Show_Hz16 ( 60 , 200 , "武汉" , BLACK , WHITE ) ; LCD_ShowString ( 20 , 90 , 100 , 40 , 16 , "China come on!" ) ; 下面以正点原子的mini开发板和2.8寸液晶LCD为例,记录一下这种显示方法的实现。 我们知道LCD上显示汉字一般都需要加上字库,因为编码方式与英文的方式不同,汉字或者说GBK各种国标码一般都是采用两个字节进行编码。暂且叫做汉字内码吧,详细的编码方式可以百度一下。 关键点: 一个汉字占的空间是2个字节(Byte),也就是说 "哈" 这样一个汉字占用两个字节的内存空间。 我们封装一种结构体类型 typFNT_GB16 : typedef struct { unsigned char Index [ 2 ] ; unsigned short Msk [ 16 ] ; }

曲线成猿之路

混江龙づ霸主 提交于 2020-02-03 00:01:48
一切的一切还得从高考说起 身处高考大省分数线奇高一本刚过的我报了一个还算可以的二本专业计算机科学与技术 学校氛围还不错,但是不流行读研。 带着参加电子设计比赛的一点点单片机知识进入职场 放弃去深圳做程序猿的机会,跑到首都(只因离家近)做起了电子元器件贸易的市场工作,一年不到时间跑遍了全国的主机厂和配套商 回到家考过编制后来去了广电行业做起了运维 无奈夕阳都算上的行业过得十分艰难 跳槽 想到了老本行 单片机 没想到会点这个在我们这个城市还挺抢手 正式成为一个程序员 最终饶了一大圈还是回到了最初的起点 其实干什么都能成事 真正的是要适合自己 并且还是要坚持下去 成为程序猿以来的这段时间 发现在即对于新知识上手速度还是非常可观的 大概算是找到了自己的坑吧 来源: CSDN 作者: goven0 链接: https://blog.csdn.net/goven0/article/details/104144933

蓝桥杯单片机综合练习6

谁都会走 提交于 2020-02-02 09:14:38
模块:数码管 (使用的蓝桥杯官方竞赛开发平台) 功能:八个数码管依次显示0~9 (也可以到F) 然后全部数码管显示 0~9 (也可以到F)依次往复循环 /************************************ 功能: 数码管从左至右依次显示0~9 之后八个数码管同时显示0~F ************************************/ #include "STC15F2K60S2.H" #include <intrins.h> #define uint unsigned int #define uchar unsigned char uint code SMG_duanma[] = //数码管段选表 {0xc0 ,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void Delay50ms() //@12.000MHz 软件延时 { unsigned char i, j, k; _nop_(); _nop_(); i = 3; j = 72; k = 161; do { do { while (--k); } while (--j); } while (--i); } void HC138init (uchar n) // HC138 译码器初始化函数 当形参是数字几 就让第几个端口 输出低电平 {

单片机的中断系统

独自空忆成欢 提交于 2020-02-02 04:38:04
有关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。 第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。 第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你常常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。 第三、中断的响应过程:当有事件产生

关于单片机中断

给你一囗甜甜゛ 提交于 2020-02-02 03:57:43
中断 :CPU停止当前任务,去处理中断内容,处理完后自动恢复以前任务。   单片机有5个中断源,2个中断优先级,中断受两级控制:     1、CPU开总中断;     2、中断源开中断。 中断源 :引起中断事件的类型。    5个中断源:     1、外部中断请求0,由INT0(P3.2)输入;     2、外部中断请求1,由INT1(P3.3)输入;     3、片内定时器/计数器0溢出中断请求;     4、片内定时器/计数器1溢出中断请求;     5、片内串行口发送/接收中断请求。//很重要,单片机应用中用了很多        定时器/计数器控制寄存器(Timer/counter Control Register ): 用来查看是否产生了外部中断             IT0,IT1(Interrupt Type):外部中断0、1触发方式选择位,由软件设置。         0-->下降沿触发方式,INT0/INT1引脚上从高到低的复跳变可引起中断;         1-->电平触发方式,INT0/INT1引脚上低电平可引起中断。       IE0,IE1(Interrupt Edge):外部中断0、1请求标志位。         当外部中断0、1依据触发方式满足条件产生中断请求时,由硬件置位(IE0/IE1=1);         当CPU响应中断时,由硬件清楚

精密软件检波

我只是一个虾纸丫 提交于 2020-02-02 00:17:51
对于电磁AI组别,如何能够从车模周围电磁传感器获得磁场精确信息是提高车模稳定性的关键。 通常情况下20kHz的低频交变磁场信息是通过10mH的工字型电感,适配以6.2nF的谐振电容检测的。该信号在经过三极管或者普通运放的放大之后送入检波电路完成幅值的检测。 3.3V单电源20kHz谐振放大电路 在推文“”中介绍了关于电磁信号放大检波中,检波二极管的死区对于检波信号的影响。下图对比了几种典型的二极管对应的检波曲线,对于使用肖特基二极管进行全波检波电路,在感应电压大于0.1V之后,检波电压与交流信号复制之间线性很好。当输入信号的幅值小于0.1V时,检波电压出现明显的衰减。 不同二极管进行20kHz检波曲线 为了消除二极管死去的影响,对于交流信号也可以直接进行软件采样然再通过软件完成幅值的检测。 下图是对20kHz的交变信号,通过单片机ADC转换之后,通过DMA送入内存之后的256个数据。 直接采样得到20kHz的交流信号数据 对于采集的信号,通过计算信号中交流成分的能量,并开根号获得信号的幅值信息。具体公式如下: 使用Fluke45万用表的交流档测量相同的信号,对照单片机通过上述方法计算出的数值,可以看到该方法检测信号的精度。 控制信号源的强度,使得放大后的交流信号有效值从5mV开始增加,一直增加到0.9V左右,将Fluke45万用表读出的数据与单片机检测数值绘制成图表如下:

STM32的SPI问题。

做~自己de王妃 提交于 2020-01-31 09:25:56
问题描述 : 之前一直使用的单片机是LPC2109,对其SPI很熟悉。基本就是原本拿来稍作修改就用。 由于某种原因需要使用STM32,然后设备的驱动是之前写好的,只修改了一些硬件控制端口,由于硬件驱动使用到了SPI接口,而我是把SPI接口提供了出来,本来以为简单修改SPI配置到对应单片机就行了。简单看了STM3的SPI配置,轻车熟路改代码,瞬间体现了良好的接口有哈。 编译,生成目标文件,下载运行。 并没有出现预想的结果。由于之前的设备驱动是能用的,所以排除设备驱动问题。 开始以为是由于对STM32端口配置的不熟悉导致的、看手册,看别人代码,没发现问题。 debug........ 问题定在SPI代码上。查看配置,一样啊。郁闷!!! 把自己配置考到别人能用的代码中,可以使用。更加郁闷!!!! debug看寄存器。对比能运行代码寄存器状态。发现运行到一段代码的时候寄存器不同 SPI_CR 0x0043 SPI_CR 0x0002 看datasheet.OVR置位。问题应该就在这了。可是为什么呢?????? 搜此问题,此处出自 这里 溢出错误(OVR)  溢出错误表示连续传输多个数据时,后一个数据覆盖了前一个数据而产生的错误。  状态标志SPIF表示的是数据传输正在进行中,它对数据的传输有较大的影响。主器件的SPIF有效由数据寄存器的空标志SPTE=0产生