关于嵌入式单片机话题,很多电源工程师工作中会遇到不同的问题。其实找到问题的根源,才能对症下药。下面给大家分享几篇不错的文章,供大家学习~
国产新塘N76E003老牌单片机N76E003老牌单片机,看到很多项目都用N76E003这个片子,今天就来研究一下。先来介绍一下新塘官方的样板:NuTiny-SDK-N76E003,究竟长什么样子,看下面的图就知道了,有一种一份为二的冲动,的确有时候也可以这么玩,设计的初衷就是让你掰着玩的。
这块板卡我虽然没有具体用过,也没有拿到新塘官方的样板,但是这颗TargetChip N76E003的确挺火的,板卡分为左右两半部分,左边是以TargetChip的核心板,引出了相关的引脚,一个复位按钮,一个电源指示灯,一个用户IOLED,同时也引出了VCC和GND电源引脚。右边是新塘设计的Nu-Link-Me,主要实现对新塘系列的单片机的下载和调试功能,Nu-Link-Me的主控使用的是:MCU12SRE3DE,这颗芯片暂时没有详细查资料,后面给大家补上,网上很多大神将Nu-Link-Me魔改为DAP,Nu-Link-Me就跟我们熟悉的ST-LinkULink类似,使用USB一键下载和调试目标芯片程序,新塘这里称Nu-Link-Me的主控为ICEController,此外,Nu-Link-Me还支持虚拟串口,使用SW3拨码开关来使能和失能虚拟串口,使能虚拟串口时,N76E003AT20的UART0作为串口和PC串口助手通讯。
这颗芯开发环境如何搭建?
张三说IAR好用,李四说Keil 好用 pack包多,王五说我就喜欢捣鼓,用VScode有些芯片也可以用…………..,开发IDE云里雾里,最好上手还是keil C51,那么如何在keil C51上使用Nu-Link-Me来下载和调试程序? 主要分为以下几步:
第一步:修改Debug 使用 Nuvoton 8051 Keil C51 Driver 作为调试器
第二步:确保设置界面按照以下连接方式进行默认设置。
第三步:FLASH编程工具记得使用Nuvoton 8051 Keil C51 Driver 哦!
这样就可以使用Nu-Link-Me一键下载和调试程序了。
差补知识点1:Nu-Link-Me 原理图分析:
下图是从新塘官网down下来的Nu-Link-Me 原理图,是不是跟ST-Link有些面熟?本人使用过赛元的MCU,赛元的调试器使用的是STM32作为主控,有兴趣的可以去研究一下,同样是调试器,Nu-Link-Me也大同小异,只要拿到固件,参考其原理图设计,自己就可以做出一个Nu-Link-Me……
单片机驱动LCD的编程思想网络上配套STM32开发板有很多LCD例程,主要是TFT LCD跟OLED的。从这些例程,大家都能学会如何点亮一个LCD。但这代码都有下面问题:
- 分层不清晰,通俗讲就是模块化太差。
- 接口乱。只要接口不乱,分层就会好很多了。
- 可移植性差。
- 通用性差。
为什么这样说呢?如果你已经了解了LCD的操作,请思考如下情景:
1、代码空间不够,只能保留9341的驱动,其他LCD驱动全部删除。能一键(一个宏定义)删除吗?删除后要改多少地方才能编译通过?
2、有一个新产品,收银设备。系统有两个LCD,都是OLED,驱动IC相同,但是一个是128x64,另一个是128x32像素,一个叫做主显示,收银员用;一个叫顾显,顾客看金额。怎么办?这些例程代码要怎么改才能支持两个屏幕?全部代码复制粘贴然后改函数名称?这样确实能完成任务,只不过程序从此就进入恶性循环了。
3、一个OLED,原来接在这些IO,后来改到别的IO,容易改吗?
4、原来只是支持中文,现在要卖到南美,要支持多米尼加语言,好改吗?
LCD种类概述在讨论怎么写LCD驱动之前,我们先大概了解一下嵌入式常用LCD。概述一些跟驱动架构设计有关的概念,在此不对原理和细节做深入讨论,会有专门文章介绍,或者参考网络文档。
TFT lcd
TFT LCD,也就是我们常说的彩屏。通常像素较高,例如常见的2.8寸,320X240像素。4.0寸的,像素800X400。这些屏通常使用并口,也就是8080或6800接口(STM32 的FSMC接口);或者是RGB接口,STM32F429等芯片支持。其他例如手机上使用的有MIPI接口。
总之,接口种类很多。也有一些支持SPI接口的。除非是比较小的屏幕,否则不建议使用SPI接口,速度慢,刷屏闪屏。玩STM32常用的TFT lcd屏幕驱动IC通常有:ILI9341/ILI9325等……
嵌入式小知识:烧录文件是被如何存储到MCU中的?单片机软件都是以hex或者bin文件的形式烧录到我们的MCU中进行存储的,那你知道这些烧录的文件在MCU中是如何分布的吗?
举一个简单的例子,编译一个STM32例程的MDK软件工程,得到输出信息如下:
接下来详细看下Program Size的组成部分解析(我们烧录文件的组成部分):
Code:程序代码段,主要用于储存程序代码。
Ro-data:只读类型数据段,主要用于存放程序中定义的常量。
RW-data:读写类型数据段,主要用于存放被初始化为非0值的全局变量。
ZI-data:读写类型数据段,主要用于存放被初始化为0值的全局变量。
看到这里你可能会有点好奇都是读写数据类型,为什么要分为RW和ZI两个部分呢?(思考一下,文章后面会给出答案)。
通常我们所说的MCU的存储部分主要是片内Flash和片内RAM,这里我可以简单地把片内忽略掉,那么我们烧录文件中的四个段内容,哪些需要烧录到Flash?哪些又要烧录到RAM中呢?你知道对工程Map一下,在map文件的最后会给出答案。(map的含义就是内存映射,map一下就是查看所有的代码及数据的内存映射地址),如下:
RO size:包含了Code 和RO data ,是需要存放在MCU的flash空间中……
STM32 嵌入式平台上的语音识别系统语音识别是机器通过识别和理解过程把人类的语音信号转变为相应文本或命令的技术,其根本目的是研究出一种具有听觉功能的机器。本设计研究孤立词语音识别系统及其在 STM32 嵌入式平台上的实现。识别流程是:预滤波、ADC、分帧、端点检测、预加重、加窗、特征提取、特征匹配。端点检测(VAD)采用短时幅度和短时过零率相结合。检测出有效语音后,根据人耳 听觉感知特性,计算每帧语音的 Mel 频率倒谱系数(MFCC)。然后采用动态时间弯折(DTW)算法与特征模板相匹配,最终输出识别结果。先用 Matlab 对上述算法进行仿真,经多次试验得出算法中所需各系数的最优值。然后将算法移植到 STM32 嵌入式平台, 移植过程中根据嵌入式平台存储空间相对较小、计算能力也相对较弱的实际情况,对算法进行优化。最终设计并制作出基于
STM32 的孤立词语音识别系统。
本设计的孤立词语音识别是语音识别技术中较为基本的,算法实现也较简单,适合于在嵌入式平台中实现一些简单的语音控制功能。以往类似系统大都基于 ARM9、ARM11、DSP、SOC 等。这些平台系统规模较大、开发和维护的难度较大、成本也相对较高。STM32 是意法半导体(ST)公司推出的基于 ARM Cortex-M3 内核的高性能单片机。上市之后,由于其出色的性能、低廉的价格,很快被运用到众多产品中。经测试,STM32F103VET6 单片机拥有能够满足本系统孤立词语音识别所需的运算和存储能力。所以在本系统中采用 STM32F103VET6 作为主控制器,采集并识别语音信号。
一,系统设计任务要求
本系统利用单片机设计了一个孤立词语音识别系统,能够识别 0~9、 “上”、“下”、“左”、“右”14 个汉语语音指令。系统通过触摸式 LCD 与用户交互。
本设计的主要要求如下:
1.采集外部声音信号,转换为数字信号并存储。
2.在采集到的声音信号中找出有效语音信号的开始和结束点。
3.分析检测到的有效语音,得出语音信号特征。
4.对每个待识别的语音指令,建立特征模版。
5.比较输入语音信号特征与特征模版,识别输入的语音信号
6.显示系统操作界面,并能够接受用户控制。
系统硬件由音频放大模块、MCU、触摸屏、电源四部分组成。音频放大模块完成对外部声音信号的采集和放大。将声音信号转化为电信号,并放大到 0~3V。MCU 的 ADC 参考电压为其电源电压 3.3V。音频放大模块的输出信号不超出 MCU ADC 的电压范围,并且能够获得最大的量化精度。MCU 对音频放大模块输入的声音信号进行 AD 转换。然后提取并识别信号特征。另外,MCU 还控制触摸屏的显示和读取触摸屏点击位置。触摸屏负责显示操作界面,并接收用户操作。电源为电池供电。
系统硬件框图
本系统中采集一个汉语语音指令。录音时间长度 2s,以 8KHz 16bit 采样率对语音进行采集,所需存储空间为 32KB,另外加上语音处理、特征提取及特征匹配等中间步骤所需 RAM 空间不会超过 64KB。而 STM32F103VET6 带有 512KB Flash 和 64KB RAM。所以 STM32F103VET6 在程序空间上能够满足。语音识别中最耗时的部分是特征提取中的快速傅立叶变换换。一般来说,孤立词语音识别中有效语音时间长度小于 1s。语音信号一般 10~30ms 为一帧,本系统中按 20ms 一帧,帧移(相邻两帧的重叠部分)
10ms,这样一个语音指令不超过 100 帧。在 8KHz 16bit 的采样率下,20ms 为 160 采样点 。STM32 固件库所提供的 16 位、1024 点 FFT,在内核以 72MHz 运行时每次运算仅需 2.138ms。完成 100 帧数据的 FFT 所需时间为 213.8ms,加上其他处理所需时间,识别一个语音指令耗时不会超过 0.5s。所以在程序运行时间上 STM32F103VET6 也能够满足需要,能够进行实时的孤立词语音识别……
STM32 嵌入式平台上的语音识别系统1、试验目标
1) 输出2路PWM脉冲信号
2) 捕获1路PWM脉冲信号
本次试验会使用到2个定时器,一个高级定时器用于脉冲捕获,一个普通定时器用于PWM脉冲输出。
2、准备材料
1) STM32F103C8
2) STM32CubeMX
3、STM32CubeMX配置
3.1时钟树
系统时钟为72M,APB1 和APB2 的定时器时钟都为72MHZ。
3.2 PWM输出配置
PWM的输出配置比较简单,这里我们使用到了TIM2普通定时器控制输出,具体参数如下图。
在 Parameter Settings 页配置预分频系数为 72-1,计数周期(自动加载值)为 10000-1,定时器溢出频率,即PWM的周期,就是 72MHz/(71 1)/(9999 1) = 100Hz
3.3 PWM输入捕获配置
PWM捕获,本次试验使用到了STM32F103C8的高级定时器TIM1。配置如下图。
中断配置勾线这里,因为我们需要使用中断回调函数来计算频率占空比。
3.4 配置中断分组和中断使能
3.5串口输出
3.6生成工程
这里选择分离C.h文件,IDE 根据自己的环境选择,这里我使用的GUN编译方式的IDE所以选择了SW4SEM32……
STM32知识点总结1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备。
2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用。
3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz。
4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed InternalRC)低速内部晶振,大概为40KHz左右,提供看门狗时钟和自动唤醒单元时钟源。
5、SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL。
6、MCO[2:0]可以提供4源不同的时钟同步信号,PA8。
7、GPIO口貌似有两个反向串联的二极管用作钳位二极管。
8、总线矩阵采用轮换算法对系统总线和DMA进行仲裁。
9、ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥。
10、在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟。
11、数据字节以小端存储形式保存在存储器中。
12、内存映射区分为8个大块,每个块为512MB。
13、FLASH的一页为1K(小容量和中容量),大容量是2K。
14、系统存储区(SystemMemory)为ST公司出厂配置锁死,用户无法编辑,用于对FLASH区域进行重新编程。所以我们烧写程序务必选择BOOT1 = 0,这样通过内嵌的自举程序对FLASH进行烧写,比如中断向量表和代码。
15、STM32核心电压为1.8V。
16、STM32复位有三种:系统复位、上电复位、备份区域复位。其中系统复位除了RCC_CSR中的复位标志和BKP中的数值不复位之外,其他的所有寄存器全部复位。触发方式例如外部复位、看门狗复位、软件复位等;电源复位由于外部电源的上电/掉电复位或者待机模式返回。复位除了BKP中的寄存器值不动,其他全部复位;备份区域复位的触发源为软件复位或者VDD和VBAT全部掉电时。
17、单片机复位后所有I/O口均为浮空输入状态。
18、68个可屏蔽中断通道,16个可编程优先级,16个内核中断,一共68 16=84个中断。103系列只有60个中断,107系列才有68个中断。
19、系统启动从0x00000004开始,0x000 0000保留。
20、(NestedVectored Interrupt Controller)NVIC嵌套向量中断控制器,分为两种:抢先式优先级(可嵌套)和中断优先级(副优先级,不能嵌套)。两种优先级由4位二进制位决定。分配下来有十六种情况……
意犹未尽,查看更多精彩文章→→https://www.dianyuan.com/eestar/
往期精彩→→
身为电源工程师,LDO必须学精学透
读对反激设计文章,技术难点轻松搞定
移相全桥/环路设计其实并不难,牢固基础理论才是硬道理
学了那么多年的单片机,你真的学会了吗?
,