自RISC-V指令集2010年出身以来,业界普遍认为,RISC-V将会改变现有的由Arm和Intel X86主导的处理器架构竞争格局,尤其将会对Arm在消费类、IoT等嵌入式市场造成强烈冲击。
RISC-V的开源会极大降落指令集修正和定制的门槛,在实现芯片差异化设计的同时降落本钱,对本土发展自主可控处理器、摆脱国外垄断有着十分主要的意义。本日痞子衡就为大家盘点一下海内推出MCU级RISC-V内核IP的厂商:
注1:本文包括海内大陆地区厂商以及台湾地区厂商

注2:本文会持续更新,欢迎大家留言见告我遗漏的厂商。
一、晶心科技 N22/N25F/D25F/N45/D45系列
晶心科技株式会社于2005年景立于台湾新竹科学园区的硅导竹科研发中央,全力投入创新架构高效能/低功耗的32/64位嵌入式处理器及相对应系统芯片发展平台的设计与发展。
N22内核运用于小型物联网及穿着设备等入门级MCU,效能达同级别间最高的 3.95 Coremark/MHz,其高性能和精简设计,相称适宜处理以高数据传输率运行中的协定封包。
N25F内核适宜浮点密集型的多元运用,例如声音处里、前辈马达掌握器、卫星导航、高精度传感器领悟以及高阶智能电表等。
45系列内核均采取有序的8级双发射超标量技能,N-系列支持RTOS的运用,D-系列则支持RISC-V的SIMD / DSP指令集(P扩展指令集草案)。
产品主页:
http://www.andestech.com/cn/%e4%ba%a7%e5%93%81%e4%b8%8e%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/andescore-processors/
二、芯来科技 N100/N200/N300/N600/N900系列
芯来科技(Nuclei System Technology)成立于2018年6月,是中国大陆首家专业RISC-V处理器IP和芯片办理方案公司。
N100系列处理器内核紧张面向极低功耗与极小面积的场景而设计,非常适宜传统的8位内核或16位内核升级需求,可广泛运用于模稠浊、IoT或其他超低功耗场景。
N200系列32位超低功耗RISC-V处理器为物联网IoT终端设备的感知,连接,掌握以及轻量级智能运用而设计。
N300系列32位超低功耗RISC-V处理器面向机制能效比且须要DSP,FPU特性的场景而设计,运用于IoT和工业掌握等场景。
N600系列32位RISC-V处理器面向实时掌握或高性能嵌入式运用处景,运用于AIoT边缘打算,存储或其他实时掌握运用。
N900系列是面向高性能领域的32位RISC-V运用场置器,运用于AIoT边缘打算,数据中央,网络设备和基带通信等领域。
产品主页:https://www.nucleisys.com/product.php
三、赛昉科技 E内核系列
赛昉科技有限公司(StarFive)成立于2018年,是中国RISC-V技能和生态的领导者,拥有完全的、经由硅验证的RISC-V CPU IP产品线和平台化的软硬件全栈式芯片办理方案。
产品主页:https://www.starfivetech.com/site/risc
四、平头哥 E902系列
平头哥半导体有限公司是阿里巴巴全资的半导体芯片业务主体,紧张针对下一代云端一体芯片新型架构开拓数据中央和嵌入式IoT芯片产品。
E902采取2级极简流水线兼容RISC-V架构且对实行效率等方面进行了增强,并可进一步选配安全实行技能以增强系统安全性,适用于对功耗和本钱极其敏感的IoT、MCU等领域
产品主页:
https://www.t-head.cn/product/e902?spm=a2ouz.12987052.0.0.cc3548abUmErVZ
五、中关村落芯园 SAR-T6系列
中关村落芯园(北京)有限公司(以下简称“芯园公司”)由中关村落发展集团作为控股股东组建,为北京地区集成电路设计企业供应公共技能做事的平台公司。
SAR-T6系列,性能对标ARM Cortex-M4,紧张面向:AIoT终端、传感器、医疗、通讯、工控、机电MCU、轻量级智能以及众核智能运用等。
公司官网:http://www.zgcicc.com/
查看原文:https://www.dianyuan.com/eestar/article-8332.html
磁珠与0欧姆电阻的实战电路及其优缺陷
一、磁珠的定义与浸染
磁珠,又称磁珠滤波器,是一种具有特定电感与电阻特性的被动元件,其紧张功能是接管超高频噪声并抑制电磁波的滋扰。磁珠常日由铁氧体材料制成,其内部电感量随着频率的增加而增加,从而实现对高频噪声的有效接管。
在电路中,磁珠紧张用于肃清存在于传输线构造(电路)中的RF噪声。当高频噪声通过磁珠时,磁珠内部的电感会产生较大的阻抗,从而将高频噪声转化为热能花费掉,达到肃清噪声的目的。同时,磁珠对直流旗子暗记(DC)的电阻值险些为零,因此不会影响电路的正常事情。
二、实战电路中的运用
在实战电路中,磁珠常日被用于电源线和旗子暗记线的滤波。通过将磁珠串联在电源线或旗子暗记线上,可以有效地抑制高频噪声的传播,提高电路的抗滋扰能力。此外,磁珠还可以用于改进电磁兼容性(EMC)和电磁滋扰(EMI)问题,提高电子设备的稳定性和可靠性。
三、0欧姆电阻的定义与浸染
0欧姆电阻,顾名思义,是一种电阻值为零的电阻。在电路中,0欧姆电阻紧张起到跳线的浸染,用于连接不同的电路节点。同时,0欧姆电阻也可以用于调度电路的布局,方便布线。
四、磁珠与0欧姆电阻的比较
优点比较磁珠的优点在于其对高频噪声的抑制能力强,可以有效提高电路的抗滋扰能力。而0欧姆电阻的优点在于其构造大略,本钱低廉,且易于布线。
缺陷比较磁珠的缺陷在于其价格相对较高,且须要根据实际运用处景选择得当的型号和规格。而0欧姆电阻虽然构造大略,但在高频噪声抑制方面效果有限,可能无法知足一些对电磁兼容性哀求较高的运用处所。
五、总结
磁珠和0欧姆电阻在电路设计中各有其独特的优点和适用场景。磁珠适用于须要抑制高频噪声和改进电磁兼容性的场合,而0欧姆电阻则更适用于大略的跳线和布线需求。在实际运用中,应根据电路的详细需求和本钱考虑选择得当的元件。
总的来说,磁珠和0欧姆电阻都是电路设计中的主要元件,它们各自发挥着独特的浸染。理解它们的定义、浸染以及优缺陷,有助于我们更好地进行电路设计,提高电路的性能和稳定性。
查看原文:https://www.dianyuan.com/eestar/article-8434.html
单片机RTC的中断阐发
实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可供应时钟日历的功能。修正计数器的值可以重新设置系统当前的韶光和日期。RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和韶光坚持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。实行以下操作将使能对后备寄存器和RTC的访问:
设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。
其供电部分如图所示,当VDD断点之后,须要VBAT管脚为其供电,才能担保RTC的正常事情。
看一下中断函数,stm32不同系列的中断函数是不一样的
stm32F和L系列,比如低功耗这块
1.利用RTC闹钟功能:再进低功耗前先获取当前RTC的韶光,在当前韶光上加10分钟,算出唤醒韶光,然后设置RTC闹钟唤醒韶光,
设置函数:HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD)
RTC闹钟中断函数:void RTC_Alarm_IRQHandler(void)
2.利用RTC的WakeUp功能,最大计数值可以设置0x1FFFF,根据时钟频率可以任意调度延时唤醒韶光,如果时1HZ的RTC计数频率,最大延时唤醒韶光(0x1FFFF+1)1/60/60=36小时
设置函数: HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,600,RTC_WAKEUPCLOCK_CK_SPRE_16BITS);//RTC600秒后唤醒
RTC周期唤醒中断函数 : void RTC_WKUP_IRQHandler(void)
3.RTC全局中断函数 RTC_IRQHandler()
把稳事变:
4.产生闹钟中断的前一瞬间,一定产生了秒中断,那么会先实行RTC_IRQHandler() 中断函数, 在RTC_IRQHandler() 实行的过程中,闹钟中断标志又被挂起,
由于RTC_IRQHandler()是全局中断函数,必须打消所有的中断标志,程序才能退出该函数, 如果RTC_IRQHandler() 和RTCAlarm_IRQHandler() 是同样的优先级,
要想让程序退出RTC_IRQHandler() 函数,那么你必须打消闹钟中断标志(如果不用除闹钟中断标志,程序会去世在RTC_IRQHandler() ), 这样问题又涌现了,打消闹钟中断标志后,程序就不会进入RTCAlarm_IRQHandler(),那么RTCAlarm_IRQHandler()函数永久也不会被实行。
5.STM32F10x有20条中断线,个中16条用于IO口中断利用,还有4条用于内部中断事宜。EXTI17便是用于内部RTC闹钟唤醒中断事宜时利用,以是初始化中除了打开RTC闹钟中断同时打开了EXTI17中断线。配置闹钟中断的话,也要开启EXTI17中断,特殊把稳。
6.STM32备份寄存器的配置与利用
嵌入式系统设计中,用来存储系统运行过程中的数据有很多种办法,而利用STM32的备份寄存器可以实现对少量数据的频繁存储。由于这种办法时将数据存储在RAM中,掉电则数据丢失,以是须要利用备份电源为芯片供电;也由于是在RAM中,理论上可以无限次存取。
代码如下
u8 RTC_Init(){u8 temp = 0;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);//电源时钟和背部时钟PWR_BackupAccessCmd(ENABLE); //许可背部区域写if (BKP_ReadBackupRegister(BKP_DR1) != 0xC0B4){ BKP_DeInit();RCC_LSEConfig(RCC_LSE_ON);while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET){ temp++; delay_ms(10);}if(temp>=250)return 1; RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); RCC_RTCCLKCmd(ENABLE); RTC_WaitForLastTask();RTC_WaitForSynchro();RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR, ENABLE);//打开RTC的秒中断和闹钟中断RTC_WaitForLastTask();RTC_EnterConfigMode(); //进入配置RTC模式RTC_SetPrescaler(32767); RTC_SetCounter(0); //初始值设定为0s RTC_WaitForLastTask();RTC_SetAlarm(40); //闹钟值设定为40sRTC_WaitForLastTask(); //等待上述配置完成RTC_ExitConfigMode(); //退出配置模式BKP_WriteBackupRegister(BKP_DR1, 0XC0B4);PWR_BackupAccessCmd(DISABLE); //不许可背部区域写操作}else{PWR_BackupAccessCmd(DISABLE);RTC_WaitForSynchro();RTC_ITConfig(RTC_IT_SEC|RTC_IT_ALR,ENABLE); //打开RTC的秒中断和闹钟中断RTC_WaitForLastTask();} NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;//RTC全局中断的中断配置NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); return 0;}//此初始化函数在主函数中的用法while(RTC_Init()){printf("INIT Programing is ERROR!!\r\n");}
if (BKP_ReadBackupRegister(BKP_DR1) != 0xC0B4) 的意思便是让STM32上电后自检是不是第一次运行这个程序。BKP_ReadBackupRegister(BKP_DR1)代表读取BKP_DR1的值,如果第一次运行这个程序那这个值一定是0X0000,值和0XC0B4不相等就进入配置初始化程序。BKP_WriteBackupRegister(BKP_DR1, 0XC0B4)代表往BKP_DR1这个寄存器中写入0XC0B4,把稳BKP_DR1这个值被写入之后就算复位他也不会被打消成0000。这样的话就算复位或者重新上电,初始程序也不会再实行一遍,以是RTC的值就不会再重新设置了。如果想要RTC的值重新从0开始计数,那就可以吧0XC0B4改成一个新的数字,重新下载一次程序就可以了。
末了在看STM32G系列的,H系列有喜好的额可以考试测验一下
只有这一个RTC中断函数,RTC_TAMP_IRQHandler
static void MX_RTC_Init(void){ / USER CODE BEGIN RTC_Init 0 / / USER CODE END RTC_Init 0 / RTC_TimeTypeDef sTime = {0}; RTC_DateTypeDef sDate = {0}; RTC_AlarmTypeDef sAlarm = {0}; / USER CODE BEGIN RTC_Init 1 / / USER CODE END RTC_Init 1 / / Initialize RTC Only / hrtc.Instance = RTC; hrtc.Init.HourFormat = RTC_HOURFORMAT_24; hrtc.Init.AsynchPrediv = 127; hrtc.Init.SynchPrediv = 255; hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE; if (HAL_RTC_Init(&hrtc) != HAL_OK) { Error_Handler(); } / USER CODE BEGIN Check_RTC_BKUP /// //重启后判断该寄存器是否有值,剖断是不是第丿次初始化,是否要装载初始倿// if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) == 0xAA)// {// //已经初始化过了,直接跳出初始化函// return;// }// //第一次初始化,将任意后备寄存器写任意值,做个标记,标记已经初始化过了,下次系统复位时不用初始匿// HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0xAA); / USER CODE END Check_RTC_BKUP / / Initialize RTC and set the Time and Date / sTime.Hours = 14; sTime.Minutes = 50; sTime.Seconds = 0; sTime.SubSeconds = 0; sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; sTime.StoreOperation = RTC_STOREOPERATION_RESET; if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) { Error_Handler(); } sDate.WeekDay = RTC_WEEKDAY_THURSDAY; sDate.Month = RTC_MONTH_JANUARY; sDate.Date = 28; sDate.Year = 21; if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) { Error_Handler(); } / Enable the Alarm A / sAlarm.AlarmTime.Hours = 14; sAlarm.AlarmTime.Minutes = 50; sAlarm.AlarmTime.Seconds = 10;//设置 10s 后产生闹钟中断 sAlarm.AlarmTime.SubSeconds = 0; sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET; sAlarm.AlarmMask = RTC_ALARMMASK_NONE; sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_NONE; sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; sAlarm.AlarmDateWeekDay = 28; sAlarm.Alarm = RTC_ALARM_A; if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK) { Error_Handler(); } / USER CODE BEGIN RTC_Init 2 / / USER CODE END RTC_Init 2 /}
查看原文:https://www.dianyuan.com/eestar/article-8435.html
软硬件实现二选一逻辑选择器
利用两种办法实现二选一逻辑选择器。一种方法是基于multisim仿真实现;其余一种是基于FPGA+Modelsim实现。
01目标
设计并实现 2 选 1 多路选择器,它的功能是通过选通掌握旗子暗记 A确定选通 B 路或 C路作为旗子暗记输出。当选通掌握旗子暗记 A为 1 时,旗子暗记输出为 C路旗子暗记;当选通掌握旗子暗记 A 为 0时,旗子暗记输出为B 路旗子暗记。
02真值表
利用multisim自带的逻辑变换器实现真值表。
03波形图
根据上述的逻辑图,画出逻辑框图。
04 multisim硬件
二选一逻辑电路如下图所示。S1,S2,S3仿照输入旗子暗记A,B,C,节点5仿照输出旗子暗记。输出旗子暗记和LED灯连接,可以判断出节点5输出的高低电平。
根据设计目标:
开关S1未闭合时,S1=1,此时输入旗子暗记C=1,此时节点5=C=1,LED不亮;
开关S1未闭合时,S1=1,此时输入旗子暗记C=0,此时节点5=C=0,LED亮;
且S2无论闭合还是导通,都不影响节点5的电平。如下图所示:
开关S1闭合时,S1=0,此时输入旗子暗记B=1,此时节点5=B=1,LED不亮;
开关S1闭合时,S1=0,此时输入旗子暗记B=0,此时节点5=B=0,LED亮;
且S3无论闭合还是导通,都不影响节点5的电平。如下图所示:
05RTL视图
编写verilog代码,二选一逻辑选择器的RTL视图如下:
编写仿真测试代码
仿真的波形图以看出,和前面逻辑图结论同等。
上面利用两种方法完成了二选一选择器的功能。从实现的办法看,硬件利用实体的逻辑门电路,对应物理天下搭建一个硬件系统来设计出硬件的功能;而利用FPGA开拓者则只须要看重程序的编程,由代码仿照出逻辑门电路,从而达到相同的效果。
对付大略的逻辑门电路,利用集成电路就可以。但对付弘大的、繁芜的系统,FPGA的上风就呈现出来了。
查看原文:https://www.dianyuan.com/eestar/article-8315.html
更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)
六篇技能文章,让你秒懂电容的脾气秉性
七篇DIY技能文章献给你,让你脑洞全开
五篇文章帮你开启DSP的学习思路
汇总篇:关于PID知识,重点在此