一,申请过程。
在MM32公开课群中获知,可以申请MM32 eMiniBoard蓝牙开发板的信息,就第一时间注册并登录面包板社区,进入测评中心申请。在这段时间内都有空上来查看申请人数,经过长久的等待再终达成心愿,终于申请通过获得开发板。但在收到开发板前,要表扬面包板社会的工作人员的工作严谨热情的态度。并通过沟通后才能获得开发板。
二,收到开发板的感觉。
当取得顺丰快递单号后,经过二天的时间,终于开发板收到。找开包装后,第一感觉这包装是我暂时见到包装最好的一块开发板。未拆包装前就来张照片。拆取过程都还算顺利,拿到手上来个上下翻转来看个够,下一步当然是来张脱包装的PCB真相照片。上传相片一见真容。
三,下载MM32W3xx模板程序及提取相应的MM32W373PSB文件。
1,在此首先感谢“面包板社区~灵动开发板评测6群”中的大神,及时发送出来模板程序。来下载一个
2020-6-14 12:51 上传
点击文件名下载附件
MM32W3xx模板程序 。
2,在MM32官网中下载keil5 pack安装包并解压后打开MindMotion.MM32W3xxB_DFP.1.0.7.pack进行安装。mm32 pack文件包
3,建立工程,提取Device整个文档内容到自建工程中。相信大家对keil5开发有一定经验了,这里就不写出步骤,如有不明相关步骤请度娘,。最后文件架构如下。
四,功能PIN口编写(LED点灯闪烁)。
1,根据MM32 eMiniBoard蓝牙开发板的原理图,将四粒LED的端口初始化。代码如下:
- 文件:lec.h
- #ifndef __LED_H
- #define __LED_H
- #include "HAL_gpio.h"
- #include "rtthread.h"
- enum LED_ENUM_LIST{
- LED1 = 0,
- LED2,
- LED3,
- LED4,
- };
- void LED_Init(void);
- void LEDx_SHOW(enum LED_ENUM_LIST ledx,rt_bool_t flag);
- #endif
- 文件:led.c
- #include "led.h"
- #include "hal_rcc.h"
- void LED_Init(void){
- //使能端口时钟。
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|
- RCC_APB2Periph_GPIOC,
- ENABLE
- );
- //配置端口参数
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //LED1
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 |
- GPIO_Pin_11 |
- GPIO_Pin_12 ; //LED2,LED3,LED4
- GPIO_Init(GPIOC,&GPIO_InitStructure);
- LEDx_SHOW(LED1,RT_FALSE);
- LEDx_SHOW(LED2,RT_FALSE);
- LEDx_SHOW(LED3,RT_FALSE);
- LEDx_SHOW(LED4,RT_FALSE);
- }
- //LED显示
- void LEDx_SHOW(enum LED_ENUM_LIST ledx, rt_bool_t flag){
- switch(ledx){
- case LED1: flag?(GPIO_ResetBits(GPIOA,GPIO_Pin_15)):(GPIO_SetBits(GPIOA,GPIO_Pin_15));
- break;
- case LED2: flag?(GPIO_ResetBits(GPIOC,GPIO_Pin_10)):(GPIO_SetBits(GPIOC,GPIO_Pin_10));
- break;
- case LED3: flag?(GPIO_ResetBits(GPIOC,GPIO_Pin_11)):(GPIO_SetBits(GPIOC,GPIO_Pin_11));
- break;
- case LED4: flag?(GPIO_ResetBits(GPIOC,GPIO_Pin_12)):(GPIO_SetBits(GPIOC,GPIO_Pin_12));
- break;
- }
- }
2,在main函数中调用LED的初始化函数,并在while中循环调用LED显示,0.1S闪烁。代码如下:
- 文件:maic.c
- #include "HAL_device.h" // Device header
- #include "led.h"
- #include "uart.h"
- #include "delay.h"
- int main(void){
- LED_Init();
- while(1){
- //Led1闪烁
- LEDx_SHOW(LED1,RT_TRUE);
- DELAY_MS(100);
- LEDx_SHOW(LED1,RT_FALSE);
- DELAY_MS(100);
- }
- }
- 文件: delay.c
- #include "delay.h"
- void DELAY_MS(rt_uint16_t ms){
- do{
- rt_uint16_t x = 5963;
- while(x--);
- }while(ms--);
- }
3,用逻辑分析仪捕获到的波形如下图。这样显示不觉得有问题0.1S闪烁,好吧,那下一步要分段显示四只LED都是0.1S闪烁效果 。
4,分段显示四只LED都是0.1S闪烁效果。代码及显示效果以下:
- int main(void){
- LED_Init();
- while(1){
- //Led1闪烁
- LEDx_SHOW(LED1,RT_TRUE);
- DELAY_MS(100);
- LEDx_SHOW(LED1,RT_FALSE);
- DELAY_MS(100);
- //Led2闪烁
- LEDx_SHOW(LED2,RT_TRUE);
- DELAY_MS(100);
- LEDx_SHOW(LED2,RT_FALSE);
- DELAY_MS(100);
- //Led4闪烁
- LEDx_SHOW(LED3,RT_TRUE);
- DELAY_MS(100);
- LEDx_SHOW(LED3,RT_FALSE);
- DELAY_MS(100);
- //Led4闪烁
- LEDx_SHOW(LED4,RT_TRUE);
- DELAY_MS(100);
- LEDx_SHOW(LED4,RT_FALSE);
- DELAY_MS(100);
- }
- }
这样显示效果不是我想要的,好了,不用怕,中国多的是人才。那就使用国产RTOS系统RT-Thread吧!RT-Thread分为两大类,我这次用Nano版,主要是使用内核部分,详细的使用方法见RT-Thread官网网址。
5,单只LED使用RT-Thread后的效果如下。
6,发现不是0.1S而是0.099S,是因为MCU用了内部RC振荡,为了达到更加准确的时间,用外部晶振,打开system_MM32W3xx.c修改方法及运行结果如下:
五,RT-Thread移植并使用RT-Thread线程单独驱动四粒LED。
1,首先检查keil5是否已成功安装了RT-Thread.
2,如果没有则要下载安装RT-Thread pack.
2020-6-14 16:41 上传
点击文件名下载附件
RT-Thread pack 。
3,安装完成后,重新打开keil5。移植RT_Thread内核较为简单方便。如下图所示:
4,已添加了RT_Thread内核,keil5界面左边显示效果如下:
5,在main.c头文件中添加rtthread.h,并在while(1){ ...}添加以下代码.
- //Led1闪烁
- LEDx_SHOW(LED1,RT_TRUE);
- rt_thread_mdelay(100); //rt-thread延时线程
- LEDx_SHOW(LED1,RT_FALSE);
- rt_thread_mdelay(100); //rt-thread延时线程
6,点击Rebuild按钮,编译后出现错误,如下图所示,报错显示为L6218E:未定义符号SystemCoreClockUpdate(引用自board.o)。
7,打开board.c,将SystemCoreClockUpdate()注释后,重新编译后通过。下载到开发板后,显示波形效果为“四,功能PIN口编写(LED点灯闪烁)中的第6点图片效果 ”。这是基于RT-Thread的延时。
8,在 main.c中增加LED线程函数,具体代码如下:
- //基于RT_Thread线程分别驱动四粒LED
- #include "HAL_device.h" // Device header
- #include "rtthread.h" // RealThread.RT-Thread::RTOS:kernel
- #include "led.h"
- #include "uart.h"
- #include "delay.h"
- #define THREAD_PRIORITY 15 //线程优先级
- #define THREAD_STACK_SIZE 512 //线程堆大小
- #define THREAD_TIMESLICE 10 //线程运行时间片
- /*
- *led线程入口
- */
- static void led1_thread_entry(void *paramenter){
- static rt_bool_t flag;// = RT_TRUE;
- while(1){
- flag = ~flag;
- LEDx_SHOW(LED1,flag);
- rt_thread_mdelay(100);
- }
- }
- static void led2_thread_entry(void *paramenter){
- static rt_bool_t flag;
- while(1){
- flag = ~flag;
- LEDx_SHOW(LED2,flag);
- rt_thread_mdelay(100);
- }
- }
- static void led3_thread_entry(void *paramenter){
- static rt_bool_t flag;
- while(1){
- flag = ~flag;
- LEDx_SHOW(LED3,flag);
- rt_thread_mdelay(100);
- }
- }
- static void led4_thread_entry(void *paramenter){
- static rt_bool_t flag;
- while(1){
- flag = ~flag;
- LEDx_SHOW(LED4,flag);
- rt_thread_mdelay(100);
- }
- }
- /*
- *创建动态LED线程,线程可分为静态及动态线程。
- */
- int led_thread_init(void){
- static rt_thread_t led1_thread;
- static rt_thread_t led2_thread;
- static rt_thread_t led3_thread;
- static rt_thread_t led4_thread;
- led1_thread = rt_thread_create("led1_thread",
- led1_thread_entry,RT_NULL,
- THREAD_STACK_SIZE,
- THREAD_PRIORITY, //优先级
- THREAD_TIMESLICE);
- if(led1_thread != RT_NULL){
- rt_thread_startup(led1_thread);
- }
- led2_thread = rt_thread_create("led2_thread",
- led2_thread_entry,RT_NULL,
- THREAD_STACK_SIZE,
- THREAD_PRIORITY + 1, //优先级比LED1低1级
- THREAD_TIMESLICE);
- if(led2_thread != RT_NULL){
- rt_thread_startup(led2_thread);
- }
- led3_thread = rt_thread_create("led3_thread",
- led3_thread_entry,RT_NULL,
- THREAD_STACK_SIZE,
- THREAD_PRIORITY + 2, //优先级比LED1低2级
- THREAD_TIMESLICE);
- if(led3_thread != RT_NULL){
- rt_thread_startup(led3_thread);
- }
- led4_thread = rt_thread_create("led4_thread",
- led4_thread_entry,RT_NULL,
- THREAD_STACK_SIZE,
- THREAD_PRIORITY + 3, //优先级比LED1低3级
- THREAD_TIMESLICE);
- if(led4_thread != RT_NULL){
- rt_thread_startup(led4_thread);
- }
- return 0;
- }
- int main(void){
- LED_Init();
- led_thread_init();
- while(1){
- }
- }
10,重新编译下载到开发板后。四粒LED同时运行起来。驱动波形如下,这才是我想要的效果。
六,代码及视频。
评测文章
热帖
大家都在看的技术资料
举报
内容系网友发布,其中涉及到安全隐患的内容系网友个人行为,不代表面包板社区观点
关闭
站长推荐 /2
- 返回顶部
工具栏