技术标签: SeekFree 全国大学生智能车竞赛 MM32F3277 MM32-Link 科学-技术-探究
简 介: 为了便于便捷开发基于MM32的单片机程序,本文从SeekFree的Gitee开源库中构造了初始化模板库。利用Python编写了一键生成工程文件以及一键下载程序。基于该基础可以完成基于MM32-Link的MM32程序的开发。
关键词
: MM32F3277,MM32-Link,SeekFree
在 基于IAR上搭建开发MM32的环境 之后,搭建基于MM32-Link的开发环境,这种开发模式好处:
▲ 图1.1.1 测试电路板
之所以将建立通用模板,是为了:
从 SeekFree Gitee的开源库 下载开源库文件;解压缩之后形成IAR可以编程的环境。
下载之后的对应的目录。
├─Example
│ ├─01-ADC_Demo
│ ├─02-LED_Demo
│ ├─03-PIT_Demo
│ ├─04-Encoder_Demo
│ ├─05-Counter_Demo
│ ├─06-UART_Demo
│ ├─07-Printf_Demo
│ ├─08-GPIO_Interrupt_Demo
│ ├─09-Flash_Demo
│ ├─10-PWM_Demo
│ ├─11-Systick_Demo
│ ├─12-Interrupt_Priority_Set_Demo
│ └─Libraries
│ ├─Device
│ ├─doc
│ ├─seekfree_libraries
│ └─seekfree_peripheral
├─Seekfree_MM32F3277_Opensource_Library
│ ├─Libraries
│ └─Project
│ ├─CODE
│ ├─IAR
│ ├─MDK
│ └─USER
│ ├─inc
│ └─src
├─【封装】核心板整体原理图封装+PCB封装
└─【文档】说明书 芯片手册等
├─DAP 下载器使用说明
└─IAR软件及MDK软件 初学必备知识
├─IAR MDK 软件在线调试简介
└─IAR MDK 软件安装包及安装教程
选择其中Examples
中02-DEMO
开始进行模板改造。
打开原来的Example-LED,观察原来公众的文件夹以及相关的文件。
▲ 图1.2.1 原来工程文件目录及其中的内容
将原来的示例LED程序拷贝到测试买水色,组成如下目录。
测试目录:
D:\zhuoqing\window\ARM\IAR\MM32\Test\TestCode
目录结构:
├─IAR
│ └─program
│ └─settings
├─Libraries
│ ├─Device
│ ├─seekfree_libraries
│ └─seekfree_peripheral
└─USER
├─inc
└─src
打开IAR中的MM32F3277,将原来的各个文件夹删除。然后逐步增加所需要的文件。
通过IAR IDE中的Project/Add Exists Projects。
D:\zhuoqing\window\ARM\IAR\MM32\Test\TestCode\IAR\program\MM32F3277.ewp
设置工程C编译对应的头文件目录。
▲ 图1.2.2 设置工程C编译对应的头文件目录
原来文件中的头文件的目录为:
$PROJ_DIR$\..\..\CODE
$PROJ_DIR$\..\..\USER\inc
$PROJ_DIR$\..\..\USER\src
$PROJ_DIR$\..\..\..\Libraries\Device\CMSIS\IAR_Core
$PROJ_DIR$\..\..\..\Libraries\Device\MM32F327x\Include
$PROJ_DIR$\..\..\..\Libraries\Device\MM32F327x\HAL_Lib\Inc
$PROJ_DIR$\..\..\..\Libraries\seekfree_libraries
$PROJ_DIR$\..\..\..\Libraries\seekfree_libraries\board
$PROJ_DIR$\..\..\..\Libraries\seekfree_libraries\common
$PROJ_DIR$\..\..\..\Libraries\seekfree_peripheral
$PROJ_DIR$\..\..\USER\src
$PROJ_DIR$\..\..\Libraries\Device\CMSIS\IAR_Core
$PROJ_DIR$\..\..\Libraries\Device\MM32F327x\Include
$PROJ_DIR$\..\..\Libraries\Device\MM32F327x\HAL_Lib\Inc
$PROJ_DIR$\..\..\Libraries\seekfree_libraries
$PROJ_DIR$\..\..\Libraries\seekfree_libraries\board
$PROJ_DIR$\..\..\Libraries\seekfree_libraries\common
$PROJ_DIR$\..\..\Libraries\seekfree_peripheral
在工程文件的配置中,“Output Converter”增加输出文件格式: Intel Extened HEX。
▲ 图1.2.3 增加输出文件格式
├─IAR
│ └─program
│ ├─Debug
│ │ ├─Exe
│ │ ├─List
│ │ └─Obj
│ └─settings
├─Libraries
│ ├─Device
│ │ ├─CMSIS
│ │ │ └─IAR_Core
│ │ └─MM32F327x
│ │ ├─HAL_Lib
│ │ │ ├─Inc
│ │ │ └─Src
│ │ ├─Include
│ │ └─Source
│ │ └─IAR_StartAsm
│ ├─seekfree_libraries
│ │ ├─board
│ │ └─common
│ └─seekfree_peripheral
└─USER
└─src
▲ 图1.2.4 改造工程模板的结构
#define MAIN_GLOBALS 1 // Define the global variables
#include "MAIN.H"
#include "headfile.h"
#define LED1 B2
int main(void) {
unsigned int nCount;
board_init(true);
OUT(LED1);
nCount = 1;
while(1) {
if(++nCount & 0x100) ON(LED1);
else OFF(LED1);
systick_delay_ms(1);
}
}
▲ 图1.2.5 运行效果
建立的MM32F3277 的初始化的工程文件存储在:
D:\zhuoqing\window\ARM\IAR\MM32\UserCode\MM32F3277
准备建立的工程文件所在目录 Clipboard:
比如:
D:\zhuoqing\window\ARM\IAR\MM32\Test\Test1
在建立工程所在的目录中,将目录copy到Windows的Clipboard。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# MM32PRG.PY -- by Dr. ZhuoQing 2021-11-03
#
# Usage: MM32PRG filename # Program filename.HEX. Default filename=MM32F3277.HEX
# >project MM32F3277 # Make the project of MM32F3277
# M MM32F3277 can be replace by other type of MM32
#
# Note:
#============================================================
from head import *
import shutil
import pyautogui
#------------------------------------------------------------
WRITE_TIME = 1
POWER_RELAY = 2 # 1:relay1, relay2
#------------------------------------------------------------
MM32_TITLE = 'MM32-LINK'
offset_x = 803
offset_y = 175
#------------------------------------------------------------
filename = 'MM32F3277.HEX'
dirstr = clipboard.paste()
MM32UserDir =r'D:\zhuoqing\window\ARM\IAR\MM32\UserCode'
MM32Project = "MM32F3277"
if len(sys.argv) > 1:
if sys.argv[1][0] == '>':
printf(dirstr)
if not os.path.isdir(dirstr):
printf("Error project directory. \a")
exit()
newdir = dirstr + '\\' + sys.argv[1][1:]
printf("Make the project directory:%s"%newdir)
if os.path.isdir(newdir):
printf("ERROR:%s has already been existed!\a"%newdir)
exit()
if len(sys.argv) > 2:
MM32Project = sys.argv[2]
copydir = MM32UserDir + '\\' + MM32Project
if not os.path.isdir(copydir):
printf("ERROR:Source dir is not existed !\a")
exit()
# os.mkdir(newdir)
shutil.copytree(copydir, newdir)
printf("Create the %s project : %s .\a"%(MM32Project, os.path.basename(newdir)))
exit()
#--------------------------------------------------------
filename = sys.argv[1]
if filename.find('.HEX') < 0:
filename = filename + '.HEX'
#------------------------------------------------------------
printf(filename)
from tsmodule.tshardware import *
#------------------------------------------------------------
#if not os.path.isfile(filename):
# printf("ERROR:Can not find file :%s\a"%filename)
# exit()
#------------------------------------------------------------
windowrect = tspgetwindowrect(MM32_TITLE)
click_x = windowrect[0] + offset_x
click_y = windowrect[1] + offset_y
#------------------------------------------------------------
def mm32connect():
global windowrect
pyautogui.click(windowrect[0] + 202, windowrect[1] + 34)
time.sleep(.2)
pyautogui.click(windowrect[0] + 180, windowrect[1] + 50)
time.sleep(.2)
mm32connect()
#------------------------------------------------------------
LOAD_FILE = 'Load form file'
pyautogui.click(click_x, click_y)
for _ in range(20):
time.sleep(.1)
rect = tspgetwindowrect(LOAD_FILE)
if sum(rect) != 0:
break
#------------------------------------------------------------
if sum(rect) == 0:
printf("No load file dialog open !\a")
exit()
#------------------------------------------------------------
clipboard.copy(filename)
tspsendwindowkey(LOAD_FILE, "n", alt=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "v", control=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "o", alt=1, noreturn=1)
time.sleep(.5)
#------------------------------------------------------------
tspsendwindowkey(MM32_TITLE, "c", alt=1, noreturn=1)
time.sleep(.5)
wm_offsetx = 430
wm_offsety = 503
click_x = windowrect[0] + wm_offsetx
click_y = windowrect[1] + wm_offsety
pyautogui.click(click_x, click_y)
time.sleep(WRITE_TIME)
#------------------------------------------------------------
mm32connect()
time.sleep(.2)
if POWER_RELAY == 1:
relay1on()
relay1on()
time.sleep(.5)
relay1off()
relay1off()
else:
relay2on()
relay2on()
time.sleep(.5)
relay2off()
relay2off()
#------------------------------------------------------------
tspfocuswindow("TEASOFT:1")
#------------------------------------------------------------
# END OF FILE : MM32PRG.PY
#============================================================
▲ 图2.2.1 编译生成最终程序
▲ 图2.3.1 自动下载执行
为了便于便捷开发基于MM32的单片机程序,本文从SeekFree的Gitee开源库中构造了初始化模板库。利用Python编写了一键生成工程文件以及一键下载程序。基于该基础可以完成基于MM32-Link的MM32程序的开发。
■ 相关文献链接:
● 相关图表链接:
文章浏览阅读198次。Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,作为主流的分布式存储技术之一,ceph越来越成为运维工程师技能树的必备要件。今天分享的ceph运维手册可谓含金量十足,汇总了Ceph在使用中常见的运维和操作问题,主要用于指导运维人员的相关工作。存储方面的新手,在对Ceph有了基础了解之后,也可以通过本手册进一步深入Ceph 的使用和运维。【领取方式戳这里】由于内容过多,在此只以截图展示部分内容,详细完整版的文档免费领取方式请见文末。目录详情:资料整理自网络_ceph 维护命令 pdf下载
文章浏览阅读1.7k次。云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!作者 | 宿何,阿里云高级开发工程师责编 | 唐小引封图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)疫情期间,“卡”成了很多人线上体验的关键词。线上预约购买口罩时,突然不能付款了;在线选课,被提示请求过多,系统无法响应;在线办公/教学时,图像或声音..._github 标星 11000 ,阿里开源的微服务组件如何连续 10 年扛住双十一大促?
文章浏览阅读1.1k次。1月中旬,央行征信中心启动了二代征信系统切换上线工作,开始面向社会公众和金融机构开放二代格式信用报告查询服务。随后,深源恒际及时跟进信用报告OCR识别产品的升级工作。目前产品迭代已完成,深源恒际将于本周内上线二代个人信用报告OCR识别服务。信用报告OCR识别产品主要面向信贷服务机构,提供基于个人信用报告的信息自动化识别与提取服务。基于OCR识别技术结合专项训练方法构建的信用报告识别专用模型,自...
文章浏览阅读3k次。斜体和粗体输入:*斜体*或_斜体_**粗体*****加粗斜体***~~删除线~~显示效果:斜体或_斜体_粗体加粗斜体删除线分级标题输入: 这是一个一级标题 ============================ 这是一个二级标题 -------------------------------------------------- #..._markdown语法 程序员
文章浏览阅读4.1k次。SVG 中的基础图形(rect , line ,circle 等)以及在 D3.js 中的应用文章目录SVG 中的基础图形(rect , line ,circle 等)以及在 D3.js 中的应用矩形 - rect直线 - line圆形 - circle椭圆 - ellipse在 D3.js 中,根据要展示的数据,我们挑选合适的 svg 中的基础图形,然后进行一系列的设置等,使其达到我们的要求..._cor-rect直线对应
文章浏览阅读3k次,点赞3次,收藏7次。中缀表达式转换成后缀表达式的基本思想: 顺序扫描中缀表达式: 若读入的是一个运算分量,则输出; 若读入的是一个左括号,则入栈,栈中左括号的优先级被视为比任何操作符都低。 若读入的是一个操作符(如 + 或 -),其级别比栈顶元素级别高,则入栈,否则,栈顶元素出栈,输出。 若读入的是右括号,栈中元素出栈,输出,直到碰到左括号,左括号出栈,但不输_利用栈,把中缀表达式转化未后缀表达式,对后缀表达式求值
文章浏览阅读2.8k次,点赞4次,收藏15次。在生成ROM时需要提供coe文件,如下图所示。这个coe文件本质上就是Memory的初始化文件,Xilinx对其有具体的格式要求。coe文件格式coe文件格式要求如下图所示,其中前两行是固定的。其中第一行定义了Radix,可以是2、10或16,意味着第2行定义的数据向量内容可以是二进制、十进制或十六进制。这里需要说明的是定义的数据向量各个数据之间可以是空格,也可以是逗号(但此时最后一个数据要以分号结尾)或者回车换行符。生成coe文件Matlab作为主流的算法开..._rom存coe
文章浏览阅读145次。oca认证 欢迎使用OCA的Java Puzzlers的第二部分。 在这一部分中,我们将看到一个有趣的案例,涉及Java 7附带的数字文字中的下划线分隔符。 在下面的类中,您可以在十进制文字中看到分隔符下划线。 还请注意,该类现在可以正常编译。 八进制是八进制表示形式,二进制是二进制,我敢肯定你不会猜十六进制。 public class Puzzler { public stati..._java认证oca
文章浏览阅读70次。8月9日,华为2019年开发者大会将于开幕。今年的华为开发者大会,共分为主题演讲、技术论坛和Codelabs。其中8月9日为主题演讲、10日和11日则是开发者活动。目前官方也正式放出了本次开发者大会的邀请函,据悉这次华为会将重点集中在5G落地、物联网、AI等领域,预计有200+专题分享、1500位合作伙伴、5000名全球开发者。“最快今年秋天,最晚明年春天,华为自研操作系统即将面世”,一个月前,面..._华为电视物联网
文章浏览阅读6.1k次,点赞16次,收藏85次。华为 1+X 网络系统运维与建设中级实操模拟题实验报告_华为1+x网络系统建设与运维中级模拟题在哪做
文章浏览阅读521次。点击有惊喜12月14日,在Freebuf 互联网安全创新大会上,阿里云云盾· 云防火墙捧得WitAwards2017互联网安全评选“年度创新产品”大奖。这已是阿里云安全团队及云盾产品,连续三年获得WitAwards奖项。阿里云云盾· 云防火墙是国内首款基于可视化的微隔离产品。评选委员会认为:阿里云云盾 · 云防火墙可以让企业在零配置的情况下,自动实现业务_阿里云 云防火墙 正式上线 2017
文章浏览阅读647次。1.使用VBoxManage modifyhd命令设置vdi文件的大小,例如,设置vdi文件大小为32G VBoxManage modifyhd /home/yunxian_19/VirtualBox\ VMs/winXP/winXP.vdi --resize 32768命令行输出 0%...10%...20%...30%...40%...50%...60%...70%...80%..._如何给linux中的winxp增加存储空间