ME32G030 系列是内嵌 ARM Cortex™ M0 核的 32 位微控制器。 该控制器具备有常用外设和功能,如高速 12 位的 ADC 转换器,UART 串口,SPI 接口,I2C 总线接口,看门狗定时器( WDT),7 个通用计数器/定时器和 24 位 RTC。除此之外,ME32G030系列还支持马达控制功能,直流无刷电机控制 PWM 模块。可以替换STM32F1G0系列。

主要特点:

内核与主频:采用ARM Cortex-M0内核,主频最高可达48MHz,具备可嵌套中断向量控制器(NVIC)和32位硬件乘法器,能够高效处理实时任务。

存储资源:配备64KB用户程序空间和5KB启动程序,内嵌8KB高速SRAM,满足中等规模嵌入式应用的存储需求。

外设接口:集成12位ADC转换器(支持12个外部输入通道)、4个UART串口、2个SPI接口、2个I2C总线接口、看门狗定时器(WDT)及7个通用计数器/定时器,支持马达控制和直流无刷电机控制PWM模块。

电源与温度:采用2.0V~5.5V宽工作电压,工作温度范围为-40°C至+85°C,适应多种工业环境。

低功耗与安全:提供多种功耗模式选择,支持BOD(Brown-Out Reset,欠压复位)功能,增强系统稳定性。

资料:https://pan.baidu.com/s/1SJxSOUxW8at4NxEcjggahA 提取码:6967

122747rvxtnlh9njmk49in

安装CPU支持包,找到G030系列,下载:

122747rauf6xq3faa34ta7

本次测试使用DMA传输ADC转换数据,并使用UART将数据上传到上位机;

进入 main函数首先将系统时钟set system clk 设置为 48M

        SYS_SetAHBClkDivider (1);

        PA0_INIT (PA0_ADC0);       

        PA1_INIT (PA1_ADC1);

初始化ADC引脚功能,要注意初始化代码和stm32库很不一样,需要查看ioconfig.h文件

#define        PA0_GPIO                0x290                          //Select function PA0

#define        PA0_SPI1_SCK                0x291                        //Select function SPI1_SCK

#define        PA0_UART1_CTS        0x292                        //Select function UART1_CTS

#define        PA0_CTIM0_CAP0                0x293                        //Select function CTIM0_CAP0

#define        PA0_CTIM0_MAT0                0x294                        //Select function CTIM0_MAT0

#define        PA0_UART3_TX                                0x295            //Select function UART3_TX

#define        PA0_CMP0_OUT                                0x296            //Select function CMP0_OUT

#define        PA0_ADC0                          0x187            //Select function ADC0

#define        PA0_CMP_IN0                                        0x187           //Select function CMP_IN0

#define  PA0_INIT(PA0_function)                IOCON->PA0 = PA0_function

#define  PA0_PULLUP(enable)                        IOCON->PA0_b.PUE = enable

#define  PA0_PULLDOWN(enable)                IOCON->PA0_b.PDE = enable

接下来完成ADC模块初始化:

        ADC_Init(300000,INTERNALVDDGND); // 配置转换速度和参考电压

        ADC_SetTrigger(ADC_START_BY_BTIM0_MAT,0);//设置启动信号为定时器0

        ADC_SetupChannels(AD0|AD1|AD2|AD3|AD4|AD5|AD6|AD7,TRIGGERMODE);

        ADC->CR_b .DMAEN =1; //使能 DMA

然后设置DMA:

DMA_Init(mydmactrl);

DMA_Channel_CFG(mydmactrl,DMA_CHN_ADC,128,DMA_HALF_WORD,(uint32_t) &(ADC->GDR),(uint32_t)adcdata0,DMA_ADDR_FIXED,DMA_ADDR_INC);

//        mydmactrl[DMA_CHN_ADC].SRC_END_PTR = (uint32_t) &(ADC->GDR); 设置数据源

//        mydmactrl[DMA_CHN_ADC].DES_END_PTR = (uint32_t) &adcdata[31];设置目标

//        mydmactrl[DMA_CHN_ADC].CHNL_CTRL_b.cycleCtrl =1;

//        mydmactrl[DMA_CHN_ADC].CHNL_CTRL_b.srcSize =1;

//        mydmactrl[DMA_CHN_ADC].CHNL_CTRL_b.srcInc = 3;  //地址不变

//        mydmactrl[DMA_CHN_ADC].CHNL_CTRL_b.dstSize = 1;

//        mydmactrl[DMA_CHN_ADC].CHNL_CTRL_b.dstInc =1;

//        mydmactrl[DMA_CHN_ADC].CHNL_CTRL_b.nMinus1 = 7;

        DMA_Channel_Enable(DMA_CHN_ADC,DMA_INITIAL_PRIORITY,DMA_CHN_INT_ENABLE);

        NVIC_EnableIRQ(DMA_IRQn);//使能DMA中断

设置定时器频率并启动定时器工作

BTIM_Init(BTIM0, 2000000); //initial timer count clock as 10K

BTIM_ConfigMatch1(BTIM0,2, TIM_MATCH_RESET_COUNTER|TIM_MATCH_TRIGGER_INT );

TIM_START(BTIM0);       

接着设置UART

        //初始化引脚

        PA9_INIT(PA9_UART0_TX);

        PA10_INIT(PA10_UART0_RX);

        //配置UART工作方式

        UART_Open(UART0,115200,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);       

        UART_Send(UART0,"DMA START\n",10);

在循环中不断发送数据:

UART_Send(UART0,"DMA START\n",10);

UART_PutHex (UART0,(uint32_t)adcdata0);

编写DMA中断函数:

void DMA_IRQHandler(void)

{DMA->CHNL_IRQ_STATUS = 1<<DMA_CHN_ADC;

        if (curpangpan==0)

        {DMA_Channel_CFG(mydmactrl,DMA_CHN_ADC,128,DMA_HALF_WORD,(uint32_t) &(ADC->GDR),(uint32_t)adcdata1,DMA_ADDR_FIXED,DMA_ADDR_INC);

        curpangpan=1;}else

        {DMA_Channel_CFG(mydmactrl,DMA_CHN_ADC,128,DMA_HALF_WORD,(uint32_t) &(ADC->GDR),(uint32_t)adcdata0,DMA_ADDR_FIXED,DMA_ADDR_INC);

                curpangpan=0;}

DMA_Channel_Enable(DMA_CHN_ADC,DMA_INITIAL_PRIORITY,DMA_CHN_INT_ENABLE);}

        仿真调试结果如下,截图中有串口接收数据和调试中ADC结果:

122747x6xrw060f24x2fv2

硬件接线如图:

122748yr0x6hh69dyr9hob