本帖最后由 小王嵌入式 于 2022-10-31 19:34 编辑

MC3172
首先非常感谢面包板社区让我拿到MC3172的板子,板子非常的精致小巧。
先简单了解一下官方给出的资料,有助于大家快速了解官方资料,方便开发:
forum.jpg
第一个MC3172_Template是MC3172的例程;
打开这个文件在MC3172文件里有线程配置工具。
Release里有下载程序。

第二个CH554G_FIRMWARE_v1.1是CH554G的 hex固件。

第三个是MounRiver_Studio安装地点。

第四个是我个人解压出来的MC3172的小板子的立创的格式PCB。
第五个、第六个是MC3172的开发指南。

指南(1):里面有图形化代码配置工具
图片1.png

按照说明可以将工程配置好。
再按说明使用GX_ISPTool工具将工程生成的hex固件烧录到芯片里。
图片2.png

有一个要注意的是:开发板是USB-micro的线,有一点要确保你的micro线是有信号线的。
我拿的usb-micro线没有信号线的,哈哈哈。在迷惑了一段时间。后来换了条micro就可以找到驱动了233。
驱动是CH554G,可以去沁恒官网找最新的驱动固件烧录进去。
指南(2):里面有一些例子说明如何去使用该单片机的,比较简单只有GPIO和定时器、CPCOM。
第七个是MC3172的手册:
虽然说明了该芯片的一些基本的信息。
第八个是更新串口固件的方法。
第九个是说明了该板子是有无源48M晶振。
最后一个是开发板的尺寸引脚。

现在我们已经了解了官方的资料了

现在看看板子吧。
图片3.png
图片4.png

全黑配色,一个usb-micro烧录,剩下都是接口,有跳线帽的都是电源脚。
图片5.png
使用  MounRiver Studio打开MC3172.wvproj这个文件,我们可以看见整个工程脉络。

图片6.png


在编写代码前,我们使用线程配置工具配置如下

图片7.png
点击生成代码。
如何回到工程里的mian.c里编写代码。
代码如下:
void thread0_main(void)
{
    INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,
            (INTDEV_RUN|
             INTDEV_IS_GROUP0|
             INTDEV_CLK_IS_CORECLK_DIV2));
    GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN0|GPIO_PIN1,GPIO_SET_ENABLE);

    GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,(GPIO_PIN0|GPIO_PIN1));

    while(1){

        GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR,(GPIO_PIN0|GPIO_PIN1));

        for (u32 var = 0; var < 5000; ++var) {
            NOP();
        }
        //user code section
        //GPIO_EXAMPLE(GPIOA_BASE_ADDR);
    }
    thread_end();
}

////////////////////////////////////////////////////////////

void thread1_main(void)
{
//    这个宏用于对外设进行启动,主要是设置外设使用的时钟频率以及特权组
    INTDEV_SET_CLK_RST(GPIOB_BASE_ADDR,
            (INTDEV_RUN|
             INTDEV_IS_GROUP0|
             INTDEV_CLK_IS_CORECLK_DIV2));
    //    这个宏用于打开 GPIO 的输出使能
    GPIO_SET_OUTPUT_EN_VALUE(GPIOB_BASE_ADDR,GPIO_PIN0|GPIO_PIN1,GPIO_SET_ENABLE);
//    这个宏用于把指定管脚输出 1,同时不影响其他管脚值。
    GPIO_SET_OUTPUT_PIN_TO_0(GPIOB_BASE_ADDR,(GPIO_PIN0|GPIO_PIN1));

    while(1){

        GPIO_SET_OUTPUT_PIN_INV(GPIOB_BASE_ADDR,(GPIO_PIN0|GPIO_PIN1));

        for (u32 var = 0; var < 5000; ++var) {
            NOP();
        }
        //user code section
        //GPCOM_UART_EXAMPLE(GPCOM8_BASE_ADDR);
    }
    thread_end();
}


4个线程 每个50M,在里面编个电平翻转,比较一下电平翻转同步时间怎么样。
两个电平翻转的延时差了大约3.76us左右,应该是硬件线程切换和有两个空线程影响了延时时间。
图片8.png
总结:从这个现象来看的话,该评估板是硬件轮询切换线程的,也确实是官方说的线程同步并行运行。可以不用自己移植RTOS,方便开发。但是官方说各个线程共享数据段和代码段。在实际开发时,可能要注意线程数据的保护,或者说自己实现简单的线程通讯。

有时间我会再试试MC3172通讯接口的。。。。

再次感谢面包板社区提供了这样一个机会让我能够接触到MC3172评估板!