【MM32 eMiniBoard测评报告】
本帖最后由 一路向北lm 于 2020-5-3 22:32 编辑汇总如下:0.开箱,让你一次看个够
1.安装mm32_devkit_set
2.LED、串口2、ADC测试
3.移植RT-Thread 到MM32L0平台
4.测试RT-Thread 的kprintf
static/image/hrline/3.gifhttps://bbs.21ic.com/static/image/hrline/3.gif
0.开箱,让你一次看个够
本帖最后由 一路向北lm 于 2020-5-3 22:31 编辑
1.安装mm32_devkit_setup
为什么要安装mm32_devkit_setup?肯定是使用keil MDK的时候可以直接使用MM32-Link啊!
安装需要以管理员的身份运行(win7),据听说有的同学没有以管理员身份运行导致MM32-Link不可以使用。
本帖最后由 一路向北lm 于 2020-4-21 17:13 编辑
安装完成后,MM32-LinK轻松使用!
2. LED、串口、ADC测试
先来LED测试,不废话,直接上代码,官方也太不走心了,明明要点亮LED1、LED2,为啥LED3和LED4亮了,是不是PCB丝印打错了……………………
int main(void)
{
delay_init();
LED_Init();
while(1)
{
LED1_ON();
LED2_ON();
}
}
修改一下引脚,好了,这样才对嘛!//修改前:
#define LED1_PortGPIOB
#define LED1_Pin GPIO_Pin_5
#define LED2_PortGPIOB
#define LED2_Pin GPIO_Pin_4
#define LED3_PortGPIOB
#define LED3_Pin GPIO_Pin_3
#define LED4_PortGPIOA
#define LED4_Pin GPIO_Pin_15
//修改后:
#define LED1_PortGPIOA
#define LED1_Pin GPIO_Pin_15
#define LED2_PortGPIOB
#define LED2_Pin GPIO_Pin_3
#define LED3_PortGPIOB
#define LED3_Pin GPIO_Pin_4
#define LED4_PortGPIOB
#define LED4_Pin GPIO_Pin_5
再来串口测试,注意CN4引出的串口时串口2,初始化串口2代码如下:void UartInit_Loop(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
UART_InitTypeDef UART_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);
CFG_GPIO_Clock(GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);
UART_StructInit(&UART_InitStructure);
UART_InitStructure.BaudRate = 115200;
//The word length is in 8-bit data format.
UART_InitStructure.WordLength = UART_WordLength_8b;
UART_InitStructure.StopBits = UART_StopBits_1;
//No even check bit.
UART_InitStructure.Parity = UART_Parity_No;
//No hardware data flow control.
UART_InitStructure.HWFlowControl = UART_HWFlowControl_None;
UART_InitStructure.Mode = UART_Mode_Rx | UART_Mode_Tx;
UART_Init(UART2, &UART_InitStructure);
UART_Cmd(UART2, ENABLE);
//UART2_TX GPIOA.2
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//UART2_RX GPIOA.3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
UartSendGroup((u8*)printBuf, sprintf(printBuf, "UART OK!\r\n"));
}
串口2的发送数据函数//发送字符串函数
void UartSendGroup(u8* buf, u16 len)
{
while(len--)
UartSendByte(*buf++);
}
//发送字节函数
void UartSendByte(u8 dat)
{
UART_SendData(UART2, dat);
while(!UART_GetFlagStatus(UART2, UART_FLAG_TXEPT));
}
接上串口线,开始测试
已经可以打印数据啦…..
本帖最后由 一路向北lm 于 2020-4-28 16:43 编辑
调试完串口,下面开始测试ADC 啦!
ADC初始化函数如下:
//使能ADC1的时钟
void ADC_RCC_ClockSet(ADC_TypeDef* ADCx, FunctionalState NewState)
{
if(ADCx == ADC1)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
}
}
//
static void ADCxSampleTimeConfig(ADC_TypeDef* ADCn, ADCSAM_TypeDef sampleTime)
{
ADCn->CFGR &= ~ADC_CFGR_SAMCTL;
ADCn->CFGR |= sampleTime;
}
//ADC1外设初始化
void ADC1BasicConfigWithParameter(void)
{
ADC_InitTypeDefADC_InitStructure;
ADC_TypeDef* ADCn;
ADCn = ADC1;
ADC_StructInit(&ADC_InitStructure);
ADC_RCC_ClockSet(ADCn,ENABLE);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_PRESCARE=ADC_PCLK2_PRESCARE_16; //ADC prescale factor
ADC_InitStructure.ADC_Mode=ADC_Mode_Continue; //Set ADC mode to continuous conversion mode
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
//AD data right-justified
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_Init(ADCn, &ADC_InitStructure);
ADCxSampleTimeConfig(ADCn, ADC_Samctl_13_5);
ADC_Cmd(ADCn,ENABLE); //Enable AD conversion
}
void ADCxChannelEnable(ADC_TypeDef* ADCn, u32 channel)
{
ADCn->CHSR &= ~(1 << channel);
ADCn->CHSR |=(1 << channel);
}
void ADC1ChannelConfigWithParameter(void)
{
ADC_TypeDef* ADCn;
ADCn = ADC1;
ADCxChannelEnable(ADCn, ADC_Channel_1);
// ADCxChannelEnable(ADCn,ADC_Channel_1);
// ADCxChannelEnable(ADCn,ADC_Channel_2);
// ADCxChannelEnable(ADCn,ADC_Channel_3);
}
void ADCxAssignPin(GPIO_TypeDef* GPIOx, u16 pin)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
CFG_GPIO_Clock(GPIOx, ENABLE);
GPIO_InitStructure.GPIO_Pin=pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Output speed
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //GPIO mode
GPIO_Init(GPIOx, &GPIO_InitStructure);
}
unsigned int ADC1_SingleChannel_Get(void)
{
u16 puiADData;
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //Software start conversion
while(ADC_GetFlagStatus(ADC1, ADC_IT_EOC) == 0);
ADC_ClearFlag(ADC1, ADC_IT_EOC);
puiADData = ADC_GetConversionValue(ADC1);
return puiADData;
}
unsigned int Get_Adc_Average(uint8_t times)
{
u32 temp_val = 0;
u8 t;
u8 delay;
for(t = 0; t < times; t++) {
temp_val += ADC1_SingleChannel_Get();
for(delay = 0; delay < 100; delay++);
}
return temp_val / times;
}
void ADC1PinConfigWithParameter(void)
{
//customer can change below config based Pin assign
//sample No.1
ADCxAssignPin(GPIOA, GPIO_Pin_1);
//ADCxAssignPin(GPIOA, GPIO_Pin_4);
//ADCxAssignPin(GPIOA, GPIO_Pin_5);
//sample No.2
//ADCxAssignPin(GPIOA, GPIO_Pin_4);
//ADCxAssignPin(GPIOA, GPIO_Pin_5);
//ADCxAssignPin(GPIOA, GPIO_Pin_6);
}
不是丝印错了,是官方提供的软件是别的片子的 wziyi 发表于 2020-4-27 18:05
不是丝印错了,是官方提供的软件是别的片子的
应该是的哈 读取板卡上Ain0 RV1电位器ADC数据,具体·函数如下:int main(void)
{
unsigned int ADCVAL;
float fValue;
delay_init();
LED_Init();
UartInit_Loop();
ADC1BasicConfigWithParameter();
ADC1ChannelConfigWithParameter();
ADC1PinConfigWithParameter();
while(1)
{
delay_ms(300);
LED1_TOGGLE();
ADCVAL = Get_Adc_Average(5);
UartSendGroup((u8*)printBuf, sprintf(printBuf, "The AD value:"));
UartSendByte(ADCVAL%10000/1000+0x30);
UartSendByte(ADCVAL%1000/100+0x30);
UartSendByte(ADCVAL%100/10+0x30);
UartSendByte(ADCVAL%10+0x30);
UartSendByte('\n');
}
}
串口ADC的打印结果:
3.移植RT-Thread到MM32L0平台准备工作:RT-Thread 源码、 MM32串口工程。
RT-Thread Nano 源码获取, Nano 去除了各种开发板的 BSP,保留了 OS 核心功能。下载地址:https://www.rt-thread.org/download/nano/rt-thread-3.1.3.zip下载好的 RT-Thread Package, RT-Thread Package 容量很小,我们直接将安装在 KEILPACK 目录下,然后将整个 RT-Thread 文件夹拷贝到我们的MM32串口工程里面。RT-Thread 文件夹目录如下:
BSP:板级支持包;
components/finsh: RT-Thread 组件;
include: 头文件;
libcpu: 与处理器相关的接口文件;
src: RT-Thread 内核源码
在MM32串口工程上新建 RT-Thread 文件夹,并在该文件夹下新建 RT-Thread-Port、
RT-Thread-Source和 RT-Thread-Include 文件夹。
将RT-Thread/3.1.3/src文件夹下的所有文件复制到新建的 RT-Thread-Source文件夹中。
将路径 RT-Thread/3.1.3/libcpu/arm/cortex-m0/文件夹下的 context_rvds.S 文件和cpuport.c 文件复制到新建的 RT-Thread-Port 文件夹中。
将路径RT-Thread\3.1.3\components\finsh 文件夹复制到新建的RT-Thread-Include 文件夹中,将路径 RT-Thread\3.1.3\include文件夹下的内容复制到新建的 RT-Thread-Include文件夹中。
页:
[1]
2