USMART移植步骤:
1.将usmart组件添加到工程文件夹下,在选项和组管理即中,配置好头文件路径和组文件。
2.usmart.c主要包含两个函数void usmart_init(u8 sysclk)和void usmart_scan(void),第一个函数里有个条件编译#if USMART_ENTIM2_SCAN==1,这个在usmart.h里设置。这个宏定义初始化定时器2,本实验在定时器2的中断处理函数中执行usmart_dev.scan();进行行usmart扫描,为了便于移植,中断初始化及处理函数写在了usamrt.c里,time.c里面的初始化和终端处理被注释掉了。
3.特别注意:这个组件使用串口发送调试函数,usart.c函数也修改了,我在测试中编译没问题了,但是调试没结果,就是这个函数没有修正过来导致的。
- //V1.4修改说明
- //1,修改串口初始化IO的bug
- //2,修改了USART_RX_STA,使得串口最大接收字节数为2的14次方
- //3,增加了USART_REC_LEN,用于定义串口最大允许接收的字节数(不大于2的14次方)
- //4,修改了EN_USART1_RX的使能方式
- #if EN_USART1_RX //如果使能了接收,在usart.h里定义
- //串口1中断服务程序
- //注意,读取USARTx->SR能避免莫名其妙的错误
- //u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节.
- u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
- //接收状态
- //bit7,接收完成标志
- //bit6,接收到0x0d
- //bit5~0,接收到的有效字节数目
- u16 USART_RX_STA=0; //接收状态标记
-
- void USART1_IRQHandler(void)
- {
- u8 res;
- if(USART1->SR&(1<<5))//接收到数据
- {
- res=USART1->DR;
- if((USART_RX_STA&0x8000)==0)//接收未完成,由原来的80改为8000
- {
- if(USART_RX_STA&0x4000)//接收到了0x0d,由原来的40改为4000
- {
- if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
- else USART_RX_STA|=0x8000; //接收完成了,由原来的80改为8000
- }else //还没收到0X0D
- {
- if(res==0x0d)USART_RX_STA|=0x4000;//由原来的40改为4000
- else
- {
- USART_RX_BUF[USART_RX_STA&0X3F]=res;
- USART_RX_STA++;
- if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
- }
- }
- }
- }
- }
- #endif
4.在主函数中添加好usmart.h头文件、加入usmart_dev.init(72);初始化USMART
5.在usmart.h 中设置USMART_ENTIM2_SCAN==1
6.在usmart_config.c里添加想要调用的函数,这里的添加函数很简单,只要把函数所在头文件添加进来,并把函数名按上图所示的方式增加即可,默认我们添加了两个函数:delay_ms和delay_us。如下:
具体参考见usmart V2.4使用说明。
注意一个问题:#if和#ifdef的区别
(1)
#if 常量表达式
程序。。。//当常量表达式非零时候才编译本段
#endif
(2)
#ifdef 标识符 //标识符经过#define定义过无论零还是非零都编译
程序。。。
#else
程序。。。
#endif
关键字:STM32 USMART 学习笔记
引用地址:
STM32-USMART学习笔记
推荐阅读最新更新时间:2024-03-16 14:43
STM32的SRAM和FLASH--概述
1 STM32片内自带SRAM和FLASH,FLASH是用来存储程序的,SRAM是用来存储程序运行中的中间变量,通常不同型号的STM32的SRAM和FLASH大小是不相同的,以我手边的STM32F103VET6来看,根据数据手册可以看到 FLASH存储器又成为闪存,它与EEPROM都是掉电后数据不丢失的存储器,但是FLASH得存储容量都普遍的大于EEPROM,,在存储控制上,最主要的区别是FLASH芯片只能一大片一大片地擦除,而EEPROM可以单个字节擦除。 2 SRAM是静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。STM32F1系列可以通过FSMC外设来拓展SRAM。 注意:
[单片机]
STM32的JTAG下载模式
SWJ:串行线JTAG配置 (Serial wire JTAG configuration) SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口。 系统复位后的默认状态是启用SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAG或SW(串行线)模式。
[单片机]
STM32生态系统—SBSFU原理介绍
安全启动,构建信任链 安全启动,作为信任根 安全启动,和用户应用一样,都是一段代码,放在片上的用户闪存中 复位后运行的代码只能是这段“安全启动” 这段“安全启动”代码,由用户开发,设备出厂后不能再修改 安全启动,如何认证下一阶段代码 “安全启动”代码,检查应用代码的签名,核实(广义的) “message integrity” 消息认证 安全启动,如何认证下一阶段代码 “安全启动”代码,检查应用代码的签名,核实(广义的) “message integrity” 签名以应用代码元数据//Meta data的形式提供 签名//元数据 是如何生成的 签名//元数据 是如何被校验的 安全固件更新
[单片机]
stm32和电机开发(从mcu到架构设计)
有过外资企业工作经验的同学应该都有这样的感觉,好像老外都很擅长做架构设计。与此相比较,国内的同学似乎更擅长编写代码。同样的设计,老外比较喜欢画图,文字部分有,但也是文字和图各一半;国内同学写文档比较少,更喜欢写代码,就算写文档也是文字和表格占了一大部分。 细细想来,出现这种差别,既有文化的原因、差异,也有产业分工的原因,同时也有东西方工作方法的差别。西方比较看重的是沟通、协同、接口定义清楚;东方讲究分工,功能完整,快速推进。 就拿架构设计来说,不管是业务层面的,还是技术层面,画图是少不了的。但是画图是为了构建模型,挖掘出问题的主要矛盾、主要流程,不是为了画图而画图。如果架构设计只是停留在纸面上,落不
[单片机]
STM32学习笔记 — 之GPIO端口篇
最近刚开始学习STM32,所以从最基本的GPIO开始学起;首先看看STM32的datasheet上对GPIO口的简单介绍: 每个GPI/O 端口有两个32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32 位置位/复位寄存器(GPIOx_BSRR),一个16 位复位寄存器(GPIOx_BRR)和一个32 位锁定寄存器(GPIOx_LCKR)。 GPIO 端口的每个位可以由软件分别配置成多种模式。每个I/O 端口位可以自由编程,然而I/0 端口寄存器必须按32 位字被访问(不允许半字或字节访问)。GPIOx_BSRR 和GPIOx_BRR 寄存器允许对
[单片机]
STM32单片机的应用笔记 奇怪的NRST 管脚异常复位问题
1. 引言 本文探讨一个奇怪的MCU NRST 管脚异常复位现象。 2.复位问题及排查 这个问题是客户对开发的平台做EMS 浪涌测试的时候发生的, 平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的EMS 测试中, 客户发现MCU有时候会异常复位而影响平台的稳定工作。 2.1. MCU 异常复位问题的通常解决思路 我们知道, 导致MCU异常复位的原因有很多, 比如外部复位电路被干扰, MCU 电源的异常跌落, 看门狗不能正常喂狗导致的复位等等。 STM32 MCU 的复位标志位寄存器可以帮助我们发现导致异常复位的线索。复位标志位的相关信息可以在STM32 MCU 的Reference Manual
[单片机]
STM32单片机,禁止系统启动时的变量初始化
使用这个功能是在IAP在线升级时需要用的。 最初使用在EEPROM或者FLASH存储一个标志位。程序跳转到BootLoader,BootLoader来判断是否需要升级。这样是可以用的,但是这样有个弊端:如果升级中出现问题,或者其他原因,导致主程序无法正常运行,看门狗咬死程序,程序复位。这样子的话,程序会一直在 引导--引导程序检测到不需要IAP--跳转到应用程序--看门狗咬死--复位--引导,进入死循环,程序判断不了应用程序已经坏掉。只能去现场来进行调试设备。 使用,禁止系统启动时的变量初始化。在BootLoader与应用程序,都在同一个地址定义相同的变量,在非断电初始化的时候,此变量是不会复位的。在BootLoade
[单片机]
基于Cortex一M3的MP3播放器设计
引 言 STM32系列微控制器采用ARM公司最新的Cortex—M3内核。VSl003音频解码芯片为VSlOxx系列的第三代产品,是芬兰VLSI Solution公司生产的单片MP3/WMA/MIDI解码和ADPCM编码芯片。本文采用STM32系列微控制器,结合解码芯片VSl003、SD卡、LCD等外围设备设计并实现了MP3播放器。其主要功能有:播放VSl003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过摇杆控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。 1 STM32处理器
[单片机]