懒猫爱飞 发表于 2018-10-23 15:01

MM32F103开发板评测(2) - 工程初探

<div class='showpostmsg'>
我用的是开发环境是KEIL MDK,版本号是uVision V5.24.2.0,目前最高的版本应该是5.25.0。关于MDK的安装与建立工程这里就不再赘述了,网上有一大把的文章,写重复也没有啥意义。我是直接在例程上改的工程。我手里的开发板处理器是MM32F103,原例程目录太深,我把工程目录拷了出来,所以MDK中,关于头文件的包含路径也要做相应的修改,同时根据自己的习惯,对MDK做了一些处理。MDK的整体配置如下所示:
图1 选择正确的元件
图2 关于ROM与RAM的选择这一页暂时按默认选项来设置,后面有会专门抽空来研究这款MCU的内存的说明,另外,我勾选上了“Use Micro LIB”这个选项。关于这个选项简单说明一下:“Use Micro LIB”是MDK自带的一处简易的库,例如在用到printf这个函数时,就会从串口1输出字符串,直接默认定向到串口1Microlib是缺省C库的备选库,它用于必须在极少量内存环境下运行的深层嵌入式应用程序,这些应用程序不在操作系统中运行。Microlib不会尝试成为符合标准的ISO库Microlib进行了高度优化以使代码变得很小,它的功能比缺省C库少,并且根本不具备某些ISO C特性,某些库函数的运行速度比较慢,例如memcpy()图3 输出选项中,一定要自己建立一个文件夹用来保存MDK修改了那么多版本,居然不提供自己建立文件夹,也真够蛋疼。
图4 关于list文件,同样建个文件夹,方便工程管理与清除
图5 因为对工程文件夹进行了修改,所以头文件路径要进行修改
图6 ASM暂时用默认选项即可
图7 Linker选项中也用默认的选项即可
图8 选择自己用的是仿真器,我用的是ulink
图9 选择下载程序用的驱动为了查看代码方便,还是建立一个sourceInsight工程吧,程序员必备的查看代码的神器,如果没用过sourceInsight的同学可以面壁去了^_^
图10 建立的sourceInsight工程这次研究的是UART_DMA的工程,简单的看了一下代码,与STM32F的工程比较类似,不过例程写的有点不符合我的风格,所以我简单的修改了一下,加上了注释,如下所示:/*********************************************************************************
* Copyright (C) 2000-2018 Mark Xu Work Studio,All Rights Reserved.
*
* 文件名称 : main.c
*
* 文件描述 : 关于main相关的一些API
*
* 文件作者 :Mark Xu
*
* 文件备注 :None
---------------------------------------------------------------------------------
* 修改记录 :
*
*   修改日期 : xxxx/xx/xx/   xx:xx
*
*   修改人员 :xx xx
*
*   修改内容 : 1) ...
**********************************************************************************/
#define MAIN_IMPLATION

#include "stdint.h"
//#include "delay.h"
#include "sys.h"
#include "uart.h"
#include "dma.h"


/*********************************************************************************
* 常量声明
**********************************************************************************/
// 串口波特率
#define UART_BUAD_RATE_DEFAULT               (115200)
// 发送缓冲 大小
#define TEXT_LENTH                                                      (9)



/*********************************************************************************
* 本地变量声明
**********************************************************************************/
static int32_t TEXT_TO_SEND[] = {'1','2','3','4','5','6','7','8','9'};

static uint8_t SendBuff[(TEXT_LENTH+2)*100];


/*********************************************************************************
* 函数名称 : Board_Init
*
* 函数描述 : 板子接口初始化
*
* 入口参数 : None
*
* 出口参数 : None
*
* 函数备注 : None
***********************************************************************************/
void Board_Init(void)
{
//    // 延时函数初始化
//        delay_init();
        // 串口初始化为115200
        uart_initwBaudRate(UART_BUAD_RATE_DEFAULT);

//DMA1通道4,外设为串口1,存储器为SendBuff,长(TEXT_LENTH+2)*100.
        MYDMA_Config(DMA1_Channel4,(u32)&UART1->TDR,(u32)SendBuff,(TEXT_LENTH+2)*10);
}


/*********************************************************************************
* 函数名称 : Uart_Send_Test
*
* 函数描述 : 串口测试
*
* 入口参数 : None
*
* 出口参数 : None
*
* 函数备注 : 测试专用,死等传输完成
***********************************************************************************/
void Uart_Send_Test(void)
{
          uint8_t t = 0;

          printf("\r\nDMA DATA:\r\n");

          // 填充ASCII字符集数据
    for(uint16_t i=0; i<(TEXT_LENTH+2)*100; i++)
    {
                          // 加入换行符
      if(t >= TEXT_LENTH)
      {
            SendBuff = 0x0d;
            SendBuff   = 0x0a;
            t = 0;
      }
      else
                                {
                                        // 复制TEXT_TO_SEND语句
              SendBuff=TEXT_TO_SEND;
                                }
    }

                // 使能uart1 DMA
    UART_DMACmd(UART1,UART_DMAReq_EN,ENABLE);
                // 开始一次DMA传输
    MYDMA_Enable(DMA1_Channel4);


    //等待DMA传输完成
    while(1)
    {
                          // 等待通道4传输完成
      if(DMA_GetFlagStatus(DMA1_FLAG_TC4) != RESET)
      {
                                          // 清除通道4传输完成标志
            DMA_ClearFlag(DMA1_FLAG_TC4);
            break;
      }
    }

    printf("\r\nUART DMA TEST OK!\r\n ");
}

/*********************************************************************************
* 函数名称 : main
*
* 函数描述 : 主程序入口
*
* 入口参数 : None
*
* 出口参数 : None
*
* 函数备注 : None
***********************************************************************************/
int main(void)
{
          // 硬件接口初始化
    Board_Init();

          // 测试串口发送
          Uart_Send_Test();
    while(1);
}







这是我的风格:titter:

好吧,这编辑器不太给力,还是看附件的内容吧


此内容由EEWORLD论坛网友懒猫爱飞原创,如需转载或用于商业用途需征得作者同意并注明出处

</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

在学习的路上 发表于 2018-10-23 21:12

楼主最后一个图用的是什么软件?

懒猫爱飞 发表于 2018-10-24 08:20

在学习的路上 发表于 2018-10-23 21:12
楼主最后一个图用的是什么软件?

sourceInsight,添加了自己的配置
截图不是这个工程中的截图,这个工程中没有用到看门狗,:)
页: [1]
查看完整版本: MM32F103开发板评测(2) - 工程初探