首先感谢芯查查给予的白嫖MM32开发板的机会,申请的速度也很快,从申请到拿到手里不到一周的时间,物流也很快。接下来我分享一下开发的心得。
1:板子外观
该开发板板载了一个MM32的DAP仿真器,插到电脑上面可以虚拟一个U盘出来,如下图:
打开U盘里面的网址,可以轻松的查到MM32官方的资料,也是比较详细的。
开发注意事项:
首次开发MM32单片机的时候,需要在安装keil或者IAR的支持包,直接在官方下载就行,根据自己的需求下载就可以,没必要将全部的支持包安装到电脑上面。不懂的小伙伴可以查考我之前的开源文章,里面有详细的软件搭建的说明,这次就不重复表述了。
由于开发板上默认的hex文件是一个呼吸灯的程序,这里我外加了一个在芯查查商城购买的红外模块,当触发的时候呼吸灯开始工作。
软件代码如下:
1: PWM 初始化部分:
由于板载的LED灯是PA11这个IO 口,所以这里我设计的定时器的TIM1 CH2方式:IO口配置如下:
这里需要设计PA11的复用功能,否则CH2不能映射到此引脚。
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); //使能RCC_AHBENR_GPIOA
GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_2); /* TIM1_CH4 */
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_11 ;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);
初始化定时器1 为PWM
uint32_t TimerPeriod = (RCC_GetPCLK1Freq() / 100000 ) - 1;
/* Compute CCR2 value to generate a duty cycle at 40% for channel 2 */
uint32_t Channel2Pulse = ((uint32_t)400 * (TimerPeriod - 1)) / 1000;
// RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM1, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);
TIM_TimeBaseStruct.TIM_Prescaler = 0;
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStruct.TIM_Period = TimerPeriod;
TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStruct);
红外检测IO口配置
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
/* K1->PA2 */
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStruct);
主程序代码如下:
int main(void)
{
int i;
OUTPUTFLAG = 0 ;
PLATFORM_Init();
/*初始化 GPIO口*/
GPIO_Condiv();
// TIM1_PWM_Output_Sample();
while (1)
{
/*启动输出*/
if((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == Bit_SET))
{
OUTPUTFLAG = 1 ;
}
/*PWM输出的控制函数*/
if(OUTPUTFLAG == 1)
{
TIM1_PWM_Output_Sample();
i = i+10;
if(i>1000) i = 0 ;
SetValue(i);
PLATFORM_DelayMS(50);
}
}
}
实物效果如下图:
全部评论