当前位置:首页 > 单片机 > 单片机
[导读]提要:costdown前言:本以为能很顺利的移植,结果130这颗芯片虽然是M3的core,实际上外部PIN与GPIO等寄存器结构与M0一致,NVIC部分又与M3一致,简言之,130即有M3的“基因”,也有M0的“基因”,主要这颗芯片是为了与

提要:costdown

前言:本以为能很顺利的移植,结果130这颗芯片虽然是M3的core,实际上外部PIN与GPIO等寄存器结构与M0一致,NVIC部分又与M3一致,简言之,130即有M3的“基因”,也有M0的“基因”,主要这颗芯片是为了与ST的M0芯片抢市场。由于刚上市,所以Library从ST M0的Library基础稍作修改。寄存器名称虽然不一样,但是实际地址与功能是完全一样。下面重点列出在移植过程中,我遇到的问题:

A0:在Keil中,Device选型:

A0:GD32f130c6应当选择STM32F101C6/8,因为该系列寄存器与GD130最接近。左图为100,右图为101,实际130的SPI包含I2SCFGR与I2SPR寄存器。


另外使用STLINK读取的Device,如图:




Q1、EXTI中断无效?


A1:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

SYSCFG_EXTILineConfig(PWR_EXTI_PORT_SOURCE,PWR_EXTI_PIN_SOURCE);

其中在操作SYSCFG寄存器时,必须先使能SYSCFG的CLK,这个问题在M0上也是一样的,但是我在移植过程中,忽略了这点。

导致花了一些时间才找到这个问题。找类似这种bug,两方面着手,一用硬件仿真,看外设寄存器是否与预设一直;二设置完后直接串口打印出来。


Q2、NVIC配置部分需要增加下面两句,M0无此配置,M3则有。

A2:

/*NVICconfigurationforprioritygrouping*/

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/*定位中断向量表*/

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);


另外中断优先级配置因为有组的概念,所以也有所不同,如;

STM32F051:

NVIC_InitStructure.NVIC_IRQChannelPriority=0x03;//0x03,与IRRec保持一致



GD130:

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;


Q3、EXTI在handler mode进入stop mode后不能唤醒,在thread mode中进入可以唤醒?

A3:

如果在Handler mode进入STOP mode,需要唤醒,则唤醒源的中断优先级必须必进入stop mode的handler 优先级更高。否则同级或更低级的中断无法唤醒,除非退出中断。这也是在thread mode进入可以被唤醒的原因。如在timer2中进入stopmode,在exti按键唤醒。demo:


staticvoidPWR_NVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;

/*EnabletheEXTIxglobalInterrupt*/

NVIC_InitStructure.NVIC_IRQChannel=PWR_EXTI_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

staticvoidTIM2_NVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;

/*EnabletheTIMglobalInterrupt*/

NVIC_InitStructure.NVIC_IRQChannel=KEY_TIM_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

Q4:SPI寄存器区别:

A4:SPIx_CR1 Bit11,051中该bit(CRCL)是CRC length,130是FF16(FF16)是data frame formate;

SPIx_CR2 bit15-bit8,130中高8位为保留字节,051则有其他定义,如fifo触发值与data size。因此130中没有该库函数:


SPI_RxFIFOThresholdConfig(LT8900SPI,SPI_RxFIFOThreshold_QF);//8bitsize->QF,16bit->HF

通讯库函数区别:


M0:


/*SendbytethroughtheSPI1peripheral*/

SPI_SendData8(LT8900SPI,*pu32Data);

/*Waittoreceiveabyte*/

while(SPI_I2S_GetFlagStatus(LT8900SPI,SPI_I2S_FLAG_RXNE)==RESET);

/*ReturnthebytereadfromtheSPIbus*/

returnSPI_ReceiveData8(LT8900SPI);

GD130:


/*SendbytethroughtheSPI1peripheral*/

SPI_I2S_SendData(LT8900SPI,*pu32Data);

/*Waittoreceiveabyte*/

while(SPI_I2S_GetFlagStatus(LT8900SPI,SPI_I2S_FLAG_RXNE)==RESET);

/*ReturnthebytereadfromtheSPIbus*/

returnSPI_I2S_ReceiveData(LT8900SPI);


Q5:使用HSE时,有效采样数的区别:


A5:

ST

#defineHSE_STARTUP_TIMEOUT((uint16_t)0x0500)/*!

GD130:

#defineHSE_STARTUP_TIMEOUT((uint16_t)0x5000)/*!


Q6:中断向量表区别,GD兼容051,但又涵盖M3的中断入口。另外051不支持自定义中断入口偏移地址。


A6:

/*自动重定位中断向量表*/

/NVIC_SetVectorTable(NVIC_VectTab_FLASH,(BaseOfROM-NVIC_VectTab_FLASH));//CM0不支持该功能

Q7:GPIO区别:


A7:虽然130为M3,但是GPIO部分与M0的寄存器结构完全一致。

Q8:Flash区别:

A8:虽然130为M3,但是Flash部分与M0结构大概相同,包含对OB区域的读写与读保护等级,多了一个烧断功能,此时不能还原为保护或无保护状态。

加读保护功能与M0一致,在使用JLink Flash中使用去除读保护是,device必须选择STM32F101系列,否则去除保护功能无效。

但有部分寄存器位有所不同,如:


FLASH->ACR=FLASH_ACR_PRFTBE|FLASH_ACR_LATENCY;//M3不支持该设置



Q9:RCC区别:

A9:M0中只有APB总线给外设提供CLK,但是M3中分了两组不同的CLK对应不同的外设,分别为APB1,APB2。如下:

M0:


uint32_tSYSCLK_Frequency;

uint32_tHCLK_Frequency;

uint32_tPCLK_Frequency;

uint32_tADCCLK_Frequency;/*PCLK=HCLK*/


RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE_DIV1;


GD130:


uint32_tSYSCLK_Frequency;/*!

uint32_tHCLK_Frequency;/*!

uint32_tPCLK1_Frequency;/*!

uint32_tPCLK2_Frequency;/*!

uint32_tADCCLK_Frequency;/*!



/*PCLK2=HCLK*/

RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;

/*PCLK1=HCLK*/

RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV1;


Q10:ID读取位置:


Flashsize位置不同,130与M3一致,但UID却与M0一致。如:

M0:

#definerFlashSizeReg(*((uint16_t*)(0x1ffff7cc)))

#defineStm32_UIDBase(uint8_t*)(0x1ffff7ac)

GD130:


#definerFlashSizeReg(*((uint16_t*)(0x1ffff7e0)))

#defineStm32_UIDBase(uint8_t*)(0x1ffff7ac)



Q11:电源特性区别:


A11:


(1)工作电压2.6-3.6V,待机时电流为250uA;;
(2)由于mcu启动功耗大于st,因此mcu稳压电容验证将1uF改为47uF,解决上电瞬间电流过大,电源特性不稳定,电压输出被拉低至2V被强制关机问题;

如下图:

(1)进入stopmode休眠后,sensorpwr关闭,中断唤醒后启动,下图为电源端与sensorpwr端电压图形。GD32端稳压电容为1uF。

同样由于上电瞬间电压不稳导致无法启动芯片,区别图(3)。



(2)进入stopmode休眠后,sensorpwr关闭,中断唤醒后启动,下

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭