From 21052cf0a7469eaed635db146c4bc9d76bbe7b34 Mon Sep 17 00:00:00 2001 From: Robofish <1683502971@qq.com> Date: Tue, 3 Feb 2026 21:21:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ioc=E5=92=8C=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 8196 bytes app/code_configuration_interface.py | 174 +++- app/data_interface.py | 25 + app/tools/code_task_config.py | 283 ++++++- assets/.DS_Store | Bin 8196 -> 8196 bytes assets/User_code/ioc/CtrBoard-H7_ALL.ioc | 700 +++++++++++++++++ assets/User_code/ioc/DevC.ioc | 743 ++++++++++++++++++ .../User_code/task/template_task/atti_esti.c | 93 +++ assets/User_code/task/template_task/task.yaml | 18 + 9 files changed, 2034 insertions(+), 2 deletions(-) create mode 100644 assets/User_code/ioc/CtrBoard-H7_ALL.ioc create mode 100644 assets/User_code/ioc/DevC.ioc create mode 100644 assets/User_code/task/template_task/atti_esti.c create mode 100644 assets/User_code/task/template_task/task.yaml diff --git a/.DS_Store b/.DS_Store index 1a46b43aacccb7b7c07ba5d842bbc0f827448f9c..d581e4ca6f22e40966dd66e7461deaafd35cda2e 100644 GIT binary patch delta 759 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aMAEdY`S@)D7#O%<>VRs~8S)tN8HyNE z(e!LW*0Y(1{c zhk(g0Z2A@pz`T&W{Jd07PGtvgFc%bb+6;~iUJStu84TqNeGIc0mND#LILdH~;SIw# zMixe~$*b9{T~TZ<3ogpb$I28ayveQXO%oez1(_jEmEZ=_uAoTXEXeVlc{0C<=VX5# Y4i2CjK=IEoIi6?g-#mg77b8rYU0~G*)05_0u1!>$^_?>w&zl= 0 and selected_index < len(preset_files): + selected_preset = preset_files[selected_index] + self.save_preset_template(selected_preset) + + def save_preset_template(self, preset_info): + """保存预设模板到用户指定位置""" + try: + # 让用户选择保存位置 + save_dir = QFileDialog.getExistingDirectory( + self, + f"选择保存 {preset_info['name']} 模板的位置", + os.path.expanduser("~") + ) + + if not save_dir: + return + + # 复制ioc文件到用户选择的目录 + target_path = os.path.join(save_dir, preset_info['filename']) + + # 检查目标文件是否已存在 + if os.path.exists(target_path): + from qfluentwidgets import Dialog + dialog = Dialog("文件已存在", f"目标位置已存在 {preset_info['filename']},是否覆盖?", self) + if dialog.exec() != Dialog.Accepted: + return + + # 复制文件 + shutil.copy2(preset_info['path'], target_path) + + InfoBar.success( + title="模板保存成功", + content=f"预设模板 {preset_info['name']} 已保存到:\n{target_path}", + parent=self, + duration=3000 + ) + + except Exception as e: + InfoBar.error( + title="保存失败", + content=f"保存预设模板失败: {str(e)}", + parent=self, + duration=3000 + ) + + def open_project_from_path(self, folder_path): + """从指定路径打开工程""" + try: + if not os.path.exists(folder_path): + return + + ioc_files = [f for f in os.listdir(folder_path) if f.endswith('.ioc')] + if ioc_files: + # 检查是否已存在 codeGenPage 标签页 + for i in range(self.stackedWidget.count()): + widget = self.stackedWidget.widget(i) + if widget is not None and widget.objectName() == "codeGenPage": + # 如果已存在,则切换到该标签页,并更新路径显示 + if hasattr(widget, "project_path"): + widget.project_path = folder_path + if hasattr(widget, "refresh"): + widget.refresh() + self.stackedWidget.setCurrentWidget(widget) + self.tabBar.setCurrentTab("codeGenPage") + return + + # 不存在则新建 + code_gen_page = CodeGenerateInterface(folder_path, self) + self.addSubInterface(code_gen_page, "codeGenPage", "代码生成") + self.stackedWidget.setCurrentWidget(code_gen_page) + self.tabBar.setCurrentTab("codeGenPage") + else: + InfoBar.error( + title="未找到.ioc文件", + content="所选文件夹不是有效的CUBEMX工程目录", + parent=self, + duration=3000 + ) + except Exception as e: + InfoBar.error( + title="打开工程失败", + content=f"打开工程失败: {str(e)}", + parent=self, + duration=3000 + ) + def choose_project_folder(self): folder = QFileDialog.getExistingDirectory(self, "选择CUBEMX工程目录") if not folder: diff --git a/app/data_interface.py b/app/data_interface.py index 4474a1a..3f7ef53 100644 --- a/app/data_interface.py +++ b/app/data_interface.py @@ -637,6 +637,31 @@ class DataInterface(QWidget): for t in task_list: desc = t.get("description", "") desc_wrapped = "\n ".join(textwrap.wrap(desc, 20)) + + # 检查是否是预设任务 + if t.get("preset_task"): + # 使用预设任务的代码 + preset_task_name = t["preset_task"] + from app.tools.code_generator import CodeGenerator + task_template_dir = CodeGenerator.get_assets_dir("User_code/task/template_task") + preset_task_file = os.path.join(task_template_dir, f"{preset_task_name}.c") + + if os.path.exists(preset_task_file): + # 直接复制预设任务文件 + task_c_path = os.path.join(output_dir, f"{t['name']}.c") + with open(preset_task_file, 'r', encoding='utf-8') as f: + preset_code = f.read() + + # 如果任务名称不同,需要替换函数名 + if preset_task_name != t["name"]: + # 替换任务函数名 + preset_code = preset_code.replace(f"Task_{preset_task_name}", t["function"]) + preset_code = preset_code.replace(f" {preset_task_name} Task", f" {t['name']} Task") + + save_with_preserve(task_c_path, preset_code) + continue + + # 使用默认模板生成任务代码 context_task = { "task_name": t["name"], "task_function": t["function"], diff --git a/app/tools/code_task_config.py b/app/tools/code_task_config.py index 4dbb6b8..b98d04e 100644 --- a/app/tools/code_task_config.py +++ b/app/tools/code_task_config.py @@ -1,7 +1,7 @@ from PyQt5.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QWidget, QScrollArea from qfluentwidgets import ( BodyLabel, TitleLabel, HorizontalSeparator, PushButton, PrimaryPushButton, - LineEdit, SpinBox, DoubleSpinBox, CheckBox, TextEdit + LineEdit, SpinBox, DoubleSpinBox, CheckBox, TextEdit, ComboBox ) from qfluentwidgets import theme, Theme import yaml @@ -76,12 +76,20 @@ class TaskConfigDialog(QDialog): self.add_btn = PrimaryPushButton("创建新任务") self.add_btn.setAutoDefault(False) # 禁止回车触发 self.add_btn.setDefault(False) + + # 新增:预设任务按钮 + self.preset_btn = PushButton("使用预设任务") + self.preset_btn.setAutoDefault(False) + self.preset_btn.setDefault(False) + self.del_btn = PushButton("删除当前任务") self.del_btn.setAutoDefault(False) # 禁止回车触发 self.del_btn.setDefault(False) self.add_btn.clicked.connect(self.add_task) + self.preset_btn.clicked.connect(self.add_preset_task) self.del_btn.clicked.connect(self.delete_current_task) btn_layout.addWidget(self.add_btn) + btn_layout.addWidget(self.preset_btn) btn_layout.addWidget(self.del_btn) btn_layout.addStretch() # 添加/删除靠左,stretch在中间 @@ -135,6 +143,274 @@ class TaskConfigDialog(QDialog): self.task_btn_layout.addWidget(btn) self.task_btn_layout.addStretch() + def get_preset_tasks(self): + """获取所有可用的预设任务""" + from app.tools.code_generator import CodeGenerator + task_dir = CodeGenerator.get_assets_dir("User_code/task/template_task") + preset_tasks = [] + + if not os.path.exists(task_dir): + return preset_tasks + + for filename in os.listdir(task_dir): + if filename.endswith('.c') and not filename.endswith('.template'): + task_name = os.path.splitext(filename)[0] + preset_tasks.append(task_name) + + return preset_tasks + + def load_preset_task_config(self, task_name): + """从 yaml 配置文件中加载预设任务的配置""" + try: + from app.tools.code_generator import CodeGenerator + template_dir = CodeGenerator.get_assets_dir("User_code/task/template_task") + config_file = os.path.join(template_dir, "task.yaml") + + if not os.path.exists(config_file): + return None + + with open(config_file, 'r', encoding='utf-8') as f: + config_data = yaml.safe_load(f) + + if config_data and task_name in config_data: + return config_data[task_name] + return None + except Exception as e: + print(f"加载预设任务配置失败: {e}") + return None + + def load_preset_task_code(self, task_name): + """加载预设任务的代码内容""" + from app.tools.code_generator import CodeGenerator + task_dir = CodeGenerator.get_assets_dir("User_code/task/template_task") + task_file = os.path.join(task_dir, f"{task_name}.c") + + if os.path.exists(task_file): + with open(task_file, 'r', encoding='utf-8') as f: + return f.read() + return None + + def add_preset_task(self): + """添加预设任务""" + preset_tasks = self.get_preset_tasks() + if not preset_tasks: + InfoBar.warning( + title="无预设任务", + content="未找到可用的预设任务模板", + parent=self, + duration=2000 + ) + return + + # 创建自适应主题的对话框 + dialog = QDialog(self) + dialog.setWindowTitle("选择预设任务") + dialog.resize(600, 500) + dialog.setModal(True) + + layout = QVBoxLayout(dialog) + layout.setContentsMargins(24, 24, 24, 24) + layout.setSpacing(18) + + # 固定内容区域 + fixed_content = QWidget() + fixed_content.setFixedHeight(180) # 减少固定高度 + fixed_layout = QVBoxLayout(fixed_content) + fixed_layout.setContentsMargins(0, 0, 0, 0) + fixed_layout.setSpacing(18) + + # 标题 + title_label = TitleLabel("选择预设任务模板") + fixed_layout.addWidget(title_label) + + # 说明文字 + desc_label = BodyLabel("选择一个预设任务模板,系统将自动复制相应的代码和配置") + fixed_layout.addWidget(desc_label) + + fixed_layout.addWidget(HorizontalSeparator()) + + # 任务选择 + select_layout = QHBoxLayout() + select_layout.setSpacing(12) + + select_label = BodyLabel("预设任务:") + preset_combo = ComboBox() + preset_combo.addItems(preset_tasks) + preset_combo.setCurrentIndex(0) + preset_combo.setMinimumWidth(160) + + select_layout.addWidget(select_label) + select_layout.addWidget(preset_combo) + select_layout.addStretch() + + fixed_layout.addLayout(select_layout) + + # 参数信息 - 单行显示 + params_layout = QHBoxLayout() + params_layout.setSpacing(24) # 适中的间距 + + self.info_freq = BodyLabel("") + self.info_delay = BodyLabel("") + self.info_stack = BodyLabel("") + self.info_ctrl = BodyLabel("") + + self.info_freq.setMinimumWidth(120) + self.info_delay.setMinimumWidth(100) + self.info_stack.setMinimumWidth(120) + self.info_ctrl.setMinimumWidth(100) + + params_layout.addWidget(self.info_freq) + params_layout.addWidget(self.info_delay) + params_layout.addWidget(self.info_stack) + params_layout.addWidget(self.info_ctrl) + params_layout.addStretch() + + fixed_layout.addLayout(params_layout) + fixed_layout.addStretch() # 在固定区域内保持紧凑 + + layout.addWidget(fixed_content) + + # 弹性描述区域 + desc_layout = QVBoxLayout() + desc_layout.setSpacing(8) + + desc_title = BodyLabel("描述:") + desc_title.setStyleSheet("font-weight: bold;") + desc_layout.addWidget(desc_title) + + self.preview_desc = TextEdit() + self.preview_desc.setReadOnly(True) + self.preview_desc.setMinimumHeight(60) # 最小高度 + desc_layout.addWidget(self.preview_desc) + + layout.addLayout(desc_layout, stretch=1) # 弹性伸缩 + + # 按钮区域 + layout.addWidget(HorizontalSeparator()) + btn_layout = QHBoxLayout() + btn_layout.addStretch() + + cancel_btn = PushButton("取消") + ok_btn = PrimaryPushButton("确定添加") + + cancel_btn.clicked.connect(dialog.reject) + ok_btn.clicked.connect(dialog.accept) + + btn_layout.addWidget(cancel_btn) + btn_layout.addWidget(ok_btn) + layout.addLayout(btn_layout) + + # 预览更新函数 + def update_preview(): + selected = preset_combo.currentText() + self.update_preset_preview(selected) + + preset_combo.currentTextChanged.connect(update_preview) + + # 存储对话框状态 + self.current_preview_dialog = dialog + self.preview_combo = preset_combo + + # 初始化预览 + if preset_tasks: + update_preview() + + # 显示对话框 + if dialog.exec() == QDialog.Accepted: + selected_task = preset_combo.currentText() + self.save_form() + new_idx = len(self.tasks) + + # 从配置文件加载预设任务参数 + config = self.load_preset_task_config(selected_task) + if config: + new_task = self._make_task_obj({ + "name": config.get("name", selected_task), + "frequency": config.get("frequency", 500), + "delay": config.get("delay", 0), + "stack": config.get("stack", 256), + "description": config.get("description", ""), + "freq_control": config.get("freq_control", True) + }) + else: + new_task = self._make_task_obj({"name": selected_task}) + + new_task["preset_task"] = selected_task + + self.tasks.append(new_task) + self.current_index = new_idx + self.refresh_task_btns() + self.show_task_form(self.tasks[self.current_index]) + + InfoBar.success( + title="添加成功", + content=f"已添加预设任务:{selected_task}", + parent=self, + duration=2000 + ) + + def update_preset_preview(self, task_name): + """更新预设任务预览信息""" + # 从配置加载信息 + config = self.load_preset_task_config(task_name) + if config: + self.info_freq.setText(f"频率: {config.get('frequency', 500)} Hz") + self.info_delay.setText(f"延时: {config.get('delay', 0)} ms") + self.info_stack.setText(f"堆栈: {config.get('stack', 256)} Bytes") + freq_ctrl = "启用" if config.get('freq_control', True) else "禁用" + self.info_ctrl.setText(f"频率控制: {freq_ctrl}") + + description = config.get('description', f'预设任务:{task_name}') + self.preview_desc.setText(description) + else: + self.info_freq.setText("频率: 500 Hz") + self.info_delay.setText("延时: 0 ms") + self.info_stack.setText("堆栈: 256 Bytes") + self.info_ctrl.setText("频率控制: 启用") + self.preview_desc.setText(f"预设任务:{task_name}") + + def on_preset_task_selected(self, task_name): + """预设任务选择事件(向后兼容)""" + pass + + def get_preset_task_description(self, task_name): + """获取预设任务的描述信息""" + # 首先尝试从 yaml 配置中获取描述 + config = self.load_preset_task_config(task_name) + if config and 'description' in config: + return f"预设任务:{task_name}\n\n{config['description']}\n\n频率控制:{'启用' if config.get('freq_control', True) else '禁用'}\n运行频率:{config.get('frequency', 500)} Hz\n堆栈大小:{config.get('stack', 256)} Bytes\n初始延时:{config.get('delay', 0)} ms" + + # 如果没有配置文件,则从代码注释中提取 + try: + task_code = self.load_preset_task_code(task_name) + if task_code: + # 尝试从注释中提取描述 + lines = task_code.split('\n') + description_lines = [] + in_comment = False + + for line in lines[:20]: # 只检查前20行 + line = line.strip() + if line.startswith('/*'): + in_comment = True + if 'Task' in line and line != '/*': + description_lines.append(line.replace('/*', '').strip()) + continue + elif line.endswith('*/'): + in_comment = False + break + elif in_comment and line and not line.startswith('*'): + description_lines.append(line) + + if description_lines: + return '\n'.join(description_lines) + else: + return f"预设任务:{task_name}\n这是一个预定义的任务模板,包含完整的实现代码。" + else: + return f"预设任务:{task_name}\n无法读取任务描述。" + except Exception as e: + return f"预设任务:{task_name}\n读取描述时出现错误:{str(e)}" + def add_task(self): self.save_form() new_idx = len(self.tasks) @@ -302,5 +578,10 @@ class TaskConfigDialog(QDialog): } if freq_ctrl: task["frequency"] = freq + + # 保留预设任务信息 + if "preset_task" in t: + task["preset_task"] = t["preset_task"] + tasks.append(task) return tasks \ No newline at end of file diff --git a/assets/.DS_Store b/assets/.DS_Store index 8c7d3d4f862eec7131b117a521e533b8bcefd7a9..5fa5ccf9d4e0b53cd644b936665752f80eb485a2 100644 GIT binary patch delta 20 bcmZp1XmQx^Lx97?%tA-O)X->?APYYLN1p|y delta 20 bcmZp1XmQx^Lx97`%uGkY#K3ZsAPYYLM~MZd diff --git a/assets/User_code/ioc/CtrBoard-H7_ALL.ioc b/assets/User_code/ioc/CtrBoard-H7_ALL.ioc new file mode 100644 index 0000000..13166ec --- /dev/null +++ b/assets/User_code/ioc/CtrBoard-H7_ALL.ioc @@ -0,0 +1,700 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_4 +ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_19 +ADC1.ClockPrescaler=ADC_CLOCK_ASYNC_DIV64 +ADC1.ContinuousConvMode=ENABLE +ADC1.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,master,ClockPrescaler,ContinuousConvMode,ConversionDataManagement,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,OffsetSignedSaturation-1\#ChannelRegularConversion,NbrOfConversion +ADC1.NbrOfConversion=2 +ADC1.NbrOfConversionFlag=1 +ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC1.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC1.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE +ADC1.OffsetSignedSaturation-1\#ChannelRegularConversion=DISABLE +ADC1.Rank-0\#ChannelRegularConversion=1 +ADC1.Rank-1\#ChannelRegularConversion=2 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5 +ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5 +ADC1.master=1 +CAD.formats= +CAD.pinconfig= +CAD.provider= +CORTEX_M7.BaseAddress-Cortex_Memory_Protection_Unit_Region0_Settings=0x24000000 +CORTEX_M7.CPU_DCache=Disabled +CORTEX_M7.CPU_ICache=Disabled +CORTEX_M7.Enable-Cortex_Memory_Protection_Unit_Region0_Settings=MPU_REGION_ENABLE +CORTEX_M7.IPParameters=CPU_DCache,CPU_ICache,MPU_Control,Enable-Cortex_Memory_Protection_Unit_Region0_Settings,BaseAddress-Cortex_Memory_Protection_Unit_Region0_Settings,Size-Cortex_Memory_Protection_Unit_Region0_Settings,TypeExtField-Cortex_Memory_Protection_Unit_Region0_Settings,IsCacheable-Cortex_Memory_Protection_Unit_Region0_Settings,IsBufferable-Cortex_Memory_Protection_Unit_Region0_Settings +CORTEX_M7.IsBufferable-Cortex_Memory_Protection_Unit_Region0_Settings=MPU_ACCESS_BUFFERABLE +CORTEX_M7.IsCacheable-Cortex_Memory_Protection_Unit_Region0_Settings=MPU_ACCESS_CACHEABLE +CORTEX_M7.MPU_Control=__NULL +CORTEX_M7.Size-Cortex_Memory_Protection_Unit_Region0_Settings=MPU_REGION_SIZE_512B +CORTEX_M7.TypeExtField-Cortex_Memory_Protection_Unit_Region0_Settings=MPU_TEX_LEVEL1 +Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.ADC1.0.EventEnable=DISABLE +Dma.ADC1.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.ADC1.0.Instance=DMA1_Stream0 +Dma.ADC1.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.ADC1.0.MemInc=DMA_MINC_ENABLE +Dma.ADC1.0.Mode=DMA_CIRCULAR +Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE +Dma.ADC1.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.ADC1.0.Priority=DMA_PRIORITY_LOW +Dma.ADC1.0.RequestNumber=1 +Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.ADC1.0.SignalID=NONE +Dma.ADC1.0.SyncEnable=DISABLE +Dma.ADC1.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.ADC1.0.SyncRequestNumber=1 +Dma.ADC1.0.SyncSignalID=NONE +Dma.Request0=ADC1 +Dma.Request1=SPI2_RX +Dma.Request2=SPI2_TX +Dma.Request3=UART5_RX +Dma.RequestsNb=4 +Dma.SPI2_RX.1.Direction=DMA_PERIPH_TO_MEMORY +Dma.SPI2_RX.1.EventEnable=DISABLE +Dma.SPI2_RX.1.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.SPI2_RX.1.Instance=DMA1_Stream1 +Dma.SPI2_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.SPI2_RX.1.MemInc=DMA_MINC_ENABLE +Dma.SPI2_RX.1.Mode=DMA_NORMAL +Dma.SPI2_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.SPI2_RX.1.PeriphInc=DMA_PINC_DISABLE +Dma.SPI2_RX.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.SPI2_RX.1.Priority=DMA_PRIORITY_LOW +Dma.SPI2_RX.1.RequestNumber=1 +Dma.SPI2_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.SPI2_RX.1.SignalID=NONE +Dma.SPI2_RX.1.SyncEnable=DISABLE +Dma.SPI2_RX.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.SPI2_RX.1.SyncRequestNumber=1 +Dma.SPI2_RX.1.SyncSignalID=NONE +Dma.SPI2_TX.2.Direction=DMA_MEMORY_TO_PERIPH +Dma.SPI2_TX.2.EventEnable=DISABLE +Dma.SPI2_TX.2.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.SPI2_TX.2.Instance=DMA1_Stream2 +Dma.SPI2_TX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.SPI2_TX.2.MemInc=DMA_MINC_ENABLE +Dma.SPI2_TX.2.Mode=DMA_NORMAL +Dma.SPI2_TX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.SPI2_TX.2.PeriphInc=DMA_PINC_DISABLE +Dma.SPI2_TX.2.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.SPI2_TX.2.Priority=DMA_PRIORITY_LOW +Dma.SPI2_TX.2.RequestNumber=1 +Dma.SPI2_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.SPI2_TX.2.SignalID=NONE +Dma.SPI2_TX.2.SyncEnable=DISABLE +Dma.SPI2_TX.2.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.SPI2_TX.2.SyncRequestNumber=1 +Dma.SPI2_TX.2.SyncSignalID=NONE +Dma.UART5_RX.3.Direction=DMA_PERIPH_TO_MEMORY +Dma.UART5_RX.3.EventEnable=DISABLE +Dma.UART5_RX.3.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.UART5_RX.3.Instance=DMA1_Stream3 +Dma.UART5_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.UART5_RX.3.MemInc=DMA_MINC_ENABLE +Dma.UART5_RX.3.Mode=DMA_NORMAL +Dma.UART5_RX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.UART5_RX.3.PeriphInc=DMA_PINC_DISABLE +Dma.UART5_RX.3.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.UART5_RX.3.Priority=DMA_PRIORITY_LOW +Dma.UART5_RX.3.RequestNumber=1 +Dma.UART5_RX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.UART5_RX.3.SignalID=NONE +Dma.UART5_RX.3.SyncEnable=DISABLE +Dma.UART5_RX.3.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.UART5_RX.3.SyncRequestNumber=1 +Dma.UART5_RX.3.SyncSignalID=NONE +FDCAN1.AutoRetransmission=ENABLE +FDCAN1.CalculateBaudRateNominal=1000000 +FDCAN1.CalculateTimeBitNominal=1000 +FDCAN1.CalculateTimeQuantumNominal=200.0 +FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr,NominalTimeSeg1,AutoRetransmission +FDCAN1.NominalPrescaler=24 +FDCAN1.NominalTimeSeg1=3 +FDCAN1.RxFifo0ElmtsNbr=32 +FDCAN1.StdFiltersNbr=1 +FDCAN1.TxFifoQueueElmtsNbr=32 +FDCAN2.AutoRetransmission=ENABLE +FDCAN2.CalculateBaudRateNominal=1000000 +FDCAN2.CalculateTimeBitNominal=1000 +FDCAN2.CalculateTimeQuantumNominal=200.0 +FDCAN2.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,MessageRAMOffset,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr,NominalTimeSeg1,AutoRetransmission,RxFifo1ElmtsNbr +FDCAN2.MessageRAMOffset=0x406 +FDCAN2.NominalPrescaler=24 +FDCAN2.NominalTimeSeg1=3 +FDCAN2.RxFifo0ElmtsNbr=32 +FDCAN2.RxFifo1ElmtsNbr=32 +FDCAN2.StdFiltersNbr=1 +FDCAN2.TxFifoQueueElmtsNbr=32 +FDCAN3.AutoRetransmission=ENABLE +FDCAN3.CalculateBaudRateNominal=1000000 +FDCAN3.CalculateTimeBitNominal=1000 +FDCAN3.CalculateTimeQuantumNominal=200.0 +FDCAN3.ExtFiltersNbr=1 +FDCAN3.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,MessageRAMOffset,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,StdFiltersNbr,NominalTimeSeg1,AutoRetransmission,RxFifo1ElmtsNbr,ExtFiltersNbr +FDCAN3.MessageRAMOffset=0x812 +FDCAN3.NominalPrescaler=24 +FDCAN3.NominalTimeSeg1=3 +FDCAN3.RxFifo0ElmtsNbr=32 +FDCAN3.RxFifo1ElmtsNbr=32 +FDCAN3.StdFiltersNbr=1 +FDCAN3.TxFifoQueueElmtsNbr=32 +FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE +FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.configTOTAL_HEAP_SIZE=0x10000 +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +MMTAppRegionsCount=0 +MMTConfigApplied=false +Mcu.CPN=STM32H723VGT6 +Mcu.Family=STM32H7 +Mcu.IP0=ADC1 +Mcu.IP1=CORTEX_M7 +Mcu.IP10=OCTOSPI1 +Mcu.IP11=RCC +Mcu.IP12=SPI1 +Mcu.IP13=SPI2 +Mcu.IP14=SYS +Mcu.IP15=TIM1 +Mcu.IP16=TIM2 +Mcu.IP17=TIM3 +Mcu.IP18=TIM12 +Mcu.IP19=UART5 +Mcu.IP2=DEBUG +Mcu.IP20=UART7 +Mcu.IP21=USART1 +Mcu.IP22=USART2 +Mcu.IP23=USART3 +Mcu.IP24=USART10 +Mcu.IP25=USB_OTG_HS +Mcu.IP3=DMA +Mcu.IP4=FDCAN1 +Mcu.IP5=FDCAN2 +Mcu.IP6=FDCAN3 +Mcu.IP7=FREERTOS +Mcu.IP8=MEMORYMAP +Mcu.IP9=NVIC +Mcu.IPNb=26 +Mcu.Name=STM32H723VGTx +Mcu.Package=LQFP100 +Mcu.Pin0=PE2 +Mcu.Pin1=PE3 +Mcu.Pin10=PC3_C +Mcu.Pin11=PA0 +Mcu.Pin12=PA1 +Mcu.Pin13=PA2 +Mcu.Pin14=PA3 +Mcu.Pin15=PA5 +Mcu.Pin16=PA7 +Mcu.Pin17=PC4 +Mcu.Pin18=PC5 +Mcu.Pin19=PB0 +Mcu.Pin2=PC13 +Mcu.Pin20=PB1 +Mcu.Pin21=PB2 +Mcu.Pin22=PE7 +Mcu.Pin23=PE8 +Mcu.Pin24=PE9 +Mcu.Pin25=PE10 +Mcu.Pin26=PE11 +Mcu.Pin27=PE12 +Mcu.Pin28=PE13 +Mcu.Pin29=PE15 +Mcu.Pin3=PC14-OSC32_IN +Mcu.Pin30=PB10 +Mcu.Pin31=PB11 +Mcu.Pin32=PB12 +Mcu.Pin33=PB13 +Mcu.Pin34=PB14 +Mcu.Pin35=PB15 +Mcu.Pin36=PD8 +Mcu.Pin37=PD9 +Mcu.Pin38=PD10 +Mcu.Pin39=PD11 +Mcu.Pin4=PC15-OSC32_OUT +Mcu.Pin40=PD12 +Mcu.Pin41=PD13 +Mcu.Pin42=PA8 +Mcu.Pin43=PA9 +Mcu.Pin44=PA10 +Mcu.Pin45=PA11 +Mcu.Pin46=PA12 +Mcu.Pin47=PA13(JTMS/SWDIO) +Mcu.Pin48=PA14(JTCK/SWCLK) +Mcu.Pin49=PA15(JTDI) +Mcu.Pin5=PH0-OSC_IN +Mcu.Pin50=PC12 +Mcu.Pin51=PD0 +Mcu.Pin52=PD1 +Mcu.Pin53=PD2 +Mcu.Pin54=PD4 +Mcu.Pin55=PD5 +Mcu.Pin56=PD6 +Mcu.Pin57=PD7 +Mcu.Pin58=PB3(JTDO/TRACESWO) +Mcu.Pin59=PB5 +Mcu.Pin6=PH1-OSC_OUT +Mcu.Pin60=PB6 +Mcu.Pin61=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin62=VP_OCTOSPI1_VS_octo +Mcu.Pin63=VP_SYS_VS_tim23 +Mcu.Pin64=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin7=PC0 +Mcu.Pin8=PC1 +Mcu.Pin9=PC2_C +Mcu.PinsNb=65 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32H723VGTx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.EXTI15_10_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.FDCAN1_IT0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.FDCAN1_IT1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.FDCAN2_IT0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.FDCAN2_IT1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.FDCAN3_IT0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.FDCAN3_IT1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SPI2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false +NVIC.TIM23_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TimeBase=TIM23_IRQn +NVIC.TimeBaseIP=TIM23 +NVIC.UART5_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.UART7_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.USART10_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.USART1_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.USART2_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.USART3_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +PA0.Locked=true +PA0.Signal=S_TIM2_CH1_ETR +PA1.Locked=true +PA1.Mode=OCTOSPI1_IOL_Port1L +PA1.Signal=OCTOSPIM_P1_IO3 +PA10.Locked=true +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA11.Mode=Device_Only_FS +PA11.Signal=USB_OTG_HS_DM +PA12.Mode=Device_Only_FS +PA12.Signal=USB_OTG_HS_DP +PA13(JTMS/SWDIO).Locked=true +PA13(JTMS/SWDIO).Mode=Serial_Wire +PA13(JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO +PA14(JTCK/SWCLK).Locked=true +PA14(JTCK/SWCLK).Mode=Serial_Wire +PA14(JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK +PA15(JTDI).Locked=true +PA15(JTDI).Signal=GPIO_Input +PA2.Locked=true +PA2.Signal=S_TIM2_CH3 +PA3.Locked=true +PA3.Mode=OCTOSPI1_IOL_Port1L +PA3.Signal=OCTOSPIM_P1_IO2 +PA5.Locked=true +PA5.Signal=ADCx_INP19 +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=WS2812 +PA7.Locked=true +PA7.Signal=S_TIM3_CH2 +PA8.Locked=true +PA8.Mode=Clock-out-1 +PA8.Signal=RCC_MCO_1 +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB0.Locked=true +PB0.Mode=OCTOSPI1_IOL_Port1L +PB0.Signal=OCTOSPIM_P1_IO1 +PB1.GPIOParameters=GPIO_Label +PB1.GPIO_Label=IMU_HEAT +PB1.Locked=true +PB1.Signal=S_TIM3_CH4 +PB10.GPIOParameters=GPIO_Label +PB10.GPIO_Label=LCD_BLK +PB10.Locked=true +PB10.Signal=GPIO_Output +PB11.GPIOParameters=GPIO_Label +PB11.GPIO_Label=LCD_RES +PB11.Locked=true +PB11.Signal=GPIO_Output +PB12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label +PB12.GPIO_Label=DCMI_REST +PB12.GPIO_PuPd=GPIO_PULLUP +PB12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB12.Locked=true +PB12.PinState=GPIO_PIN_SET +PB12.Signal=GPIO_Output +PB13.GPIOParameters=GPIO_Speed +PB13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB13.Locked=true +PB13.Mode=Full_Duplex_Master +PB13.Signal=SPI2_SCK +PB14.Mode=Hardware Flow Control (RS485) +PB14.Signal=USART3_DE +PB15.GPIOParameters=GPIO_Label +PB15.GPIO_Label=BUZZER +PB15.Locked=true +PB15.Signal=S_TIM12_CH2 +PB2.Locked=true +PB2.Mode=O1_P1_CLK +PB2.Signal=OCTOSPIM_P1_CLK +PB3(JTDO/TRACESWO).GPIOParameters=GPIO_Speed +PB3(JTDO/TRACESWO).GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PB3(JTDO/TRACESWO).Mode=TX_Only_Simplex_Unidirect_Master +PB3(JTDO/TRACESWO).Signal=SPI1_SCK +PB5.Locked=true +PB5.Mode=FDCAN_Activate +PB5.Signal=FDCAN2_RX +PB6.Locked=true +PB6.Mode=FDCAN_Activate +PB6.Signal=FDCAN2_TX +PC0.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PC0.GPIO_Label=ACCL_CS +PC0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC0.Locked=true +PC0.PinState=GPIO_PIN_SET +PC0.Signal=GPIO_Output +PC1.GPIOParameters=GPIO_Speed +PC1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC1.Mode=Full_Duplex_Master +PC1.Signal=SPI2_MOSI +PC12.Mode=Asynchronous +PC12.Signal=UART5_TX +PC13.GPIOParameters=PinState,GPIO_Label +PC13.GPIO_Label=POWER_24V_2 +PC13.Locked=true +PC13.PinState=GPIO_PIN_SET +PC13.Signal=GPIO_Output +PC14-OSC32_IN.GPIOParameters=PinState,GPIO_Label +PC14-OSC32_IN.GPIO_Label=POWER_24V_1 +PC14-OSC32_IN.Locked=true +PC14-OSC32_IN.PinState=GPIO_PIN_SET +PC14-OSC32_IN.Signal=GPIO_Output +PC15-OSC32_OUT.GPIOParameters=PinState,GPIO_Label +PC15-OSC32_OUT.GPIO_Label=POWER_5V +PC15-OSC32_OUT.Locked=true +PC15-OSC32_OUT.PinState=GPIO_PIN_SET +PC15-OSC32_OUT.Signal=GPIO_Output +PC2_C.GPIOParameters=GPIO_Speed +PC2_C.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC2_C.Mode=Full_Duplex_Master +PC2_C.Signal=SPI2_MISO +PC3_C.GPIOParameters=GPIO_Speed,PinState,GPIO_Label +PC3_C.GPIO_Label=GYRO_CS +PC3_C.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC3_C.Locked=true +PC3_C.PinState=GPIO_PIN_SET +PC3_C.Signal=GPIO_Output +PC4.Locked=true +PC4.Signal=ADCx_INP4 +PC5.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label +PC5.GPIO_Label=DCMI_PWDN +PC5.GPIO_PuPd=GPIO_NOPULL +PC5.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PC5.Locked=true +PC5.PinState=GPIO_PIN_SET +PC5.Signal=GPIO_Output +PD0.Mode=FDCAN_Activate +PD0.Signal=FDCAN1_RX +PD1.Locked=true +PD1.Mode=FDCAN_Activate +PD1.Signal=FDCAN1_TX +PD10.GPIOParameters=GPIO_Label +PD10.GPIO_Label=LCD_DC +PD10.Locked=true +PD10.Signal=GPIO_Output +PD11.Locked=true +PD11.Mode=OCTOSPI1_IOL_Port1L +PD11.Signal=OCTOSPIM_P1_IO0 +PD12.Mode=FDCAN_Activate +PD12.Signal=FDCAN3_RX +PD13.Locked=true +PD13.Mode=FDCAN_Activate +PD13.Signal=FDCAN3_TX +PD2.Mode=Asynchronous +PD2.Signal=UART5_RX +PD4.Locked=true +PD4.Mode=Hardware Flow Control (RS485) +PD4.Signal=USART2_DE +PD5.Locked=true +PD5.Mode=Asynchronous +PD5.Signal=USART2_TX +PD6.Locked=true +PD6.Mode=Asynchronous +PD6.Signal=USART2_RX +PD7.GPIOParameters=GPIO_Speed +PD7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD7.Locked=true +PD7.Mode=TX_Only_Simplex_Unidirect_Master +PD7.Signal=SPI1_MOSI +PD8.Mode=Asynchronous +PD8.Signal=USART3_TX +PD9.Mode=Asynchronous +PD9.Signal=USART3_RX +PE10.GPIOParameters=GPIO_Label +PE10.GPIO_Label=ACCL_INT +PE10.Locked=true +PE10.Signal=GPXTI10 +PE11.Locked=true +PE11.Mode=OCTOSPI1_Port1_NCS +PE11.Signal=OCTOSPIM_P1_NCS +PE12.GPIOParameters=GPIO_Label +PE12.GPIO_Label=GYRO_INT +PE12.Locked=true +PE12.Signal=GPXTI12 +PE13.Signal=S_TIM1_CH3 +PE15.GPIOParameters=GPIO_Label +PE15.GPIO_Label=LCD_CS +PE15.Locked=true +PE15.Signal=GPIO_Output +PE2.Mode=Asynchronous +PE2.Signal=USART10_RX +PE3.Mode=Asynchronous +PE3.Signal=USART10_TX +PE7.Mode=Asynchronous +PE7.Signal=UART7_RX +PE8.Mode=Asynchronous +PE8.Signal=UART7_TX +PE9.Locked=true +PE9.Signal=S_TIM1_CH1 +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32H723VGTx +ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.12.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x1000 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CtrBoard-H7_ALL.ioc +ProjectManager.ProjectName=CtrBoard-H7_ALL +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x2000 +ProjectManager.TargetToolchain=MDK-ARM V5.32 +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM12_Init-TIM12-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_SPI2_Init-SPI2-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_USART2_UART_Init-USART2-false-HAL-true,11-MX_USART3_UART_Init-USART3-false-HAL-true,12-MX_UART7_Init-UART7-false-HAL-true,13-MX_USART10_UART_Init-USART10-false-HAL-true,14-MX_FDCAN1_Init-FDCAN1-false-HAL-true,15-MX_FDCAN2_Init-FDCAN2-false-HAL-true,16-MX_FDCAN3_Init-FDCAN3-false-HAL-true,17-MX_TIM1_Init-TIM1-false-HAL-true,18-MX_TIM2_Init-TIM2-false-HAL-true,19-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,20-MX_USB_OTG_HS_PCD_Init-USB_OTG_HS-false-HAL-true,21-MX_UART5_Init-UART5-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.ADCFreq_Value=96000000 +RCC.AHB12Freq_Value=240000000 +RCC.AHB4Freq_Value=240000000 +RCC.APB1Freq_Value=120000000 +RCC.APB2Freq_Value=120000000 +RCC.APB3Freq_Value=120000000 +RCC.APB4Freq_Value=120000000 +RCC.AXIClockFreq_Value=240000000 +RCC.CECFreq_Value=32000 +RCC.CKPERFreq_Value=64000000 +RCC.CortexFreq_Value=480000000 +RCC.CpuClockFreq_Value=480000000 +RCC.D1CPREFreq_Value=480000000 +RCC.D1PPRE=RCC_APB3_DIV2 +RCC.D2PPRE1=RCC_APB1_DIV2 +RCC.D2PPRE2=RCC_APB2_DIV2 +RCC.D3PPRE=RCC_APB4_DIV2 +RCC.DFSDMACLkFreq_Value=120000000 +RCC.DFSDMFreq_Value=120000000 +RCC.DIVM1=2 +RCC.DIVM2=2 +RCC.DIVN1=40 +RCC.DIVN2=16 +RCC.DIVP1=1 +RCC.DIVP1Freq_Value=480000000 +RCC.DIVP2Freq_Value=96000000 +RCC.DIVP3Freq_Value=48375000 +RCC.DIVQ1=4 +RCC.DIVQ1Freq_Value=120000000 +RCC.DIVQ2Freq_Value=96000000 +RCC.DIVQ3Freq_Value=48375000 +RCC.DIVR1Freq_Value=240000000 +RCC.DIVR2Freq_Value=96000000 +RCC.DIVR3Freq_Value=48375000 +RCC.EnbaleCSS=false +RCC.FDCANFreq_Value=120000000 +RCC.FMCFreq_Value=240000000 +RCC.FamilyName=M +RCC.HCLK3ClockFreq_Value=240000000 +RCC.HCLKFreq_Value=240000000 +RCC.HPRE=RCC_HCLK_DIV2 +RCC.HSE_VALUE=24000000 +RCC.I2C123Freq_Value=120000000 +RCC.I2C4Freq_Value=120000000 +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVN1,DIVN2,DIVP1,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,EnbaleCSS,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HSE_VALUE,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL2_VCI_Range-AdvancedSettings,PLL2_VCO_SEL-AdvancedSettings,PLL3FRACN,PLL3_VCO_SEL-AdvancedSettings,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6CLockSelection,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBCLockSelection,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value +RCC.LPTIM1Freq_Value=120000000 +RCC.LPTIM2Freq_Value=120000000 +RCC.LPTIM345Freq_Value=120000000 +RCC.LPUART1Freq_Value=120000000 +RCC.LTDCFreq_Value=48375000 +RCC.MCO1PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=480000000 +RCC.PLL2FRACN=0 +RCC.PLL2_VCI_Range-AdvancedSettings=RCC_PLL2VCIRANGE_0 +RCC.PLL2_VCO_SEL-AdvancedSettings=RCC_PLL2VCOWIDE +RCC.PLL3FRACN=0 +RCC.PLL3_VCO_SEL-AdvancedSettings=RCC_PLL3VCOMEDIUM +RCC.PLLFRACN=0 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.QSPIFreq_Value=240000000 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.SAI1Freq_Value=120000000 +RCC.SAI4AFreq_Value=120000000 +RCC.SAI4BFreq_Value=120000000 +RCC.SDMMCFreq_Value=120000000 +RCC.SPDIFRXFreq_Value=120000000 +RCC.SPI123Freq_Value=120000000 +RCC.SPI45Freq_Value=120000000 +RCC.SPI6CLockSelection=RCC_SPI6CLKSOURCE_HSE +RCC.SPI6Freq_Value=24000000 +RCC.SWPMI1Freq_Value=120000000 +RCC.SYSCLKFreq_VALUE=480000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.Tim1OutputFreq_Value=240000000 +RCC.Tim2OutputFreq_Value=240000000 +RCC.TraceFreq_Value=240000000 +RCC.USART16Freq_Value=120000000 +RCC.USART234578Freq_Value=120000000 +RCC.USBCLockSelection=RCC_USBCLKSOURCE_HSI48 +RCC.USBFreq_Value=48000000 +RCC.VCO1OutputFreq_Value=480000000 +RCC.VCO2OutputFreq_Value=192000000 +RCC.VCO3OutputFreq_Value=96750000 +RCC.VCOInput1Freq_Value=12000000 +RCC.VCOInput2Freq_Value=12000000 +RCC.VCOInput3Freq_Value=750000 +SH.ADCx_INP19.0=ADC1_INP19,IN19-Single-Ended +SH.ADCx_INP19.ConfNb=1 +SH.ADCx_INP4.0=ADC1_INP4,IN4-Single-Ended +SH.ADCx_INP4.ConfNb=1 +SH.GPXTI10.0=GPIO_EXTI10 +SH.GPXTI10.ConfNb=1 +SH.GPXTI12.0=GPIO_EXTI12 +SH.GPXTI12.ConfNb=1 +SH.S_TIM12_CH2.0=TIM12_CH2,PWM Generation2 CH2 +SH.S_TIM12_CH2.ConfNb=1 +SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1 +SH.S_TIM1_CH1.ConfNb=1 +SH.S_TIM1_CH3.0=TIM1_CH3,PWM Generation3 CH3 +SH.S_TIM1_CH3.ConfNb=1 +SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1 +SH.S_TIM2_CH1_ETR.ConfNb=1 +SH.S_TIM2_CH3.0=TIM2_CH3,PWM Generation3 CH3 +SH.S_TIM2_CH3.ConfNb=1 +SH.S_TIM3_CH2.0=TIM3_CH2,PWM Generation2 CH2 +SH.S_TIM3_CH2.ConfNb=1 +SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4 +SH.S_TIM3_CH4.ConfNb=1 +SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4 +SPI1.CLKPolarity=SPI_POLARITY_HIGH +SPI1.CalculateBaudRate=30.0 MBits/s +SPI1.DataSize=SPI_DATASIZE_8BIT +SPI1.Direction=SPI_DIRECTION_2LINES_TXONLY +SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPolarity +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualType=VM_MASTER +SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32 +SPI2.CLKPhase=SPI_PHASE_2EDGE +SPI2.CLKPolarity=SPI_POLARITY_HIGH +SPI2.CalculateBaudRate=3.75 MBits/s +SPI2.DataSize=SPI_DATASIZE_8BIT +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CLKPolarity,CLKPhase +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualType=VM_MASTER +TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM1.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation1 CH1,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation3 CH3,Prescaler +TIM1.Period=10000 +TIM1.Prescaler=24 +TIM1.Pulse-PWM\ Generation1\ CH1=5000 +TIM1.Pulse-PWM\ Generation3\ CH3=5000 +TIM12.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM12.IPParameters=Channel-PWM Generation2 CH2,Prescaler,Period +TIM12.Period=2000-1 +TIM12.Prescaler=24-1 +TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM2.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM2.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation3 CH3,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation3 CH3,Prescaler +TIM2.Period=10000 +TIM2.Prescaler=24 +TIM2.Pulse-PWM\ Generation1\ CH1=5000 +TIM2.Pulse-PWM\ Generation3\ CH3=5000 +TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 +TIM3.IPParameters=Channel-PWM Generation4 CH4,Prescaler,Period,AutoReloadPreload,Channel-PWM Generation2 CH2 +TIM3.Period=10000-1 +TIM3.Prescaler=24-1 +UART5.BaudRate=100000 +UART5.IPParameters=Mode,WordLength,Parity,BaudRate +UART5.Mode=MODE_RX +UART5.Parity=PARITY_EVEN +UART5.WordLength=WORDLENGTH_9B +UART7.BaudRate=921600 +UART7.IPParameters=BaudRate +USART1.BaudRate=921600 +USART1.IPParameters=VirtualMode-Asynchronous,BaudRate +USART1.VirtualMode-Asynchronous=VM_ASYNC +USART10.BaudRate=921600 +USART10.IPParameters=VirtualMode,BaudRate +USART10.VirtualMode=VM_ASYNC +USART2.BaudRate=921600 +USART2.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485),BaudRate +USART2.VirtualMode-Asynchronous=VM_ASYNC +USART2.VirtualMode-Hardware\ Flow\ Control\ (RS485)=VM_ASYNC +USART3.BaudRate=921600 +USART3.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485),BaudRate +USART3.VirtualMode-Asynchronous=VM_ASYNC +USART3.VirtualMode-Hardware\ Flow\ Control\ (RS485)=VM_ASYNC +USB_OTG_HS.IPParameters=VirtualMode-Device_Only_FS +USB_OTG_HS.VirtualMode-Device_Only_FS=Device_Only_FS +VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 +VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 +VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg +VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP +VP_OCTOSPI1_VS_octo.Mode=octo_mode +VP_OCTOSPI1_VS_octo.Signal=OCTOSPI1_VS_octo +VP_SYS_VS_tim23.Mode=TIM23 +VP_SYS_VS_tim23.Signal=SYS_VS_tim23 +board=custom +rtos.0.ip=FREERTOS diff --git a/assets/User_code/ioc/DevC.ioc b/assets/User_code/ioc/DevC.ioc new file mode 100644 index 0000000..46909f1 --- /dev/null +++ b/assets/User_code/ioc/DevC.ioc @@ -0,0 +1,743 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR +ADC1.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV6 +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,ClockPrescaler +ADC1.NbrOfConversionFlag=1 +ADC1.Rank-0\#ChannelRegularConversion=1 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES +ADC1.master=1 +ADC3.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_8 +ADC3.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV6 +ADC3.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,ClockPrescaler +ADC3.NbrOfConversionFlag=1 +ADC3.Rank-0\#ChannelRegularConversion=1 +ADC3.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES +CAD.formats= +CAD.pinconfig= +CAD.provider= +CAN1.ABOM=DISABLE +CAN1.BS1=CAN_BS1_6TQ +CAN1.BS2=CAN_BS2_7TQ +CAN1.CalculateBaudRate=1000000 +CAN1.CalculateTimeBit=1000 +CAN1.CalculateTimeQuantum=71.42857142857143 +CAN1.IPParameters=CalculateTimeQuantum,BS1,BS2,Prescaler,TXFP,ABOM,CalculateTimeBit,CalculateBaudRate,NART +CAN1.NART=ENABLE +CAN1.Prescaler=3 +CAN1.TXFP=ENABLE +CAN2.BS1=CAN_BS1_6TQ +CAN2.BS2=CAN_BS2_7TQ +CAN2.CalculateBaudRate=1000000 +CAN2.CalculateTimeBit=1000 +CAN2.CalculateTimeQuantum=71.42857142857143 +CAN2.IPParameters=CalculateTimeQuantum,BS1,BS2,Prescaler,TXFP,CalculateTimeBit,CalculateBaudRate,NART +CAN2.NART=ENABLE +CAN2.Prescaler=3 +CAN2.TXFP=ENABLE +Dma.I2C2_TX.2.Direction=DMA_MEMORY_TO_PERIPH +Dma.I2C2_TX.2.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.I2C2_TX.2.Instance=DMA1_Stream7 +Dma.I2C2_TX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.I2C2_TX.2.MemInc=DMA_MINC_ENABLE +Dma.I2C2_TX.2.Mode=DMA_NORMAL +Dma.I2C2_TX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.I2C2_TX.2.PeriphInc=DMA_PINC_DISABLE +Dma.I2C2_TX.2.Priority=DMA_PRIORITY_HIGH +Dma.I2C2_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.I2C3_RX.7.Direction=DMA_PERIPH_TO_MEMORY +Dma.I2C3_RX.7.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.I2C3_RX.7.Instance=DMA1_Stream2 +Dma.I2C3_RX.7.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.I2C3_RX.7.MemInc=DMA_MINC_ENABLE +Dma.I2C3_RX.7.Mode=DMA_NORMAL +Dma.I2C3_RX.7.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.I2C3_RX.7.PeriphInc=DMA_PINC_DISABLE +Dma.I2C3_RX.7.Priority=DMA_PRIORITY_LOW +Dma.I2C3_RX.7.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.Request0=SPI1_RX +Dma.Request1=SPI1_TX +Dma.Request2=I2C2_TX +Dma.Request3=USART3_RX +Dma.Request4=USART6_RX +Dma.Request5=USART6_TX +Dma.Request6=USART1_TX +Dma.Request7=I2C3_RX +Dma.Request8=USART1_RX +Dma.RequestsNb=9 +Dma.SPI1_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.SPI1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.SPI1_RX.0.Instance=DMA2_Stream2 +Dma.SPI1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.SPI1_RX.0.MemInc=DMA_MINC_ENABLE +Dma.SPI1_RX.0.Mode=DMA_NORMAL +Dma.SPI1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.SPI1_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.SPI1_RX.0.Priority=DMA_PRIORITY_VERY_HIGH +Dma.SPI1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.SPI1_TX.1.Direction=DMA_MEMORY_TO_PERIPH +Dma.SPI1_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.SPI1_TX.1.Instance=DMA2_Stream3 +Dma.SPI1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.SPI1_TX.1.MemInc=DMA_MINC_ENABLE +Dma.SPI1_TX.1.Mode=DMA_NORMAL +Dma.SPI1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.SPI1_TX.1.PeriphInc=DMA_PINC_DISABLE +Dma.SPI1_TX.1.Priority=DMA_PRIORITY_HIGH +Dma.SPI1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART1_RX.8.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART1_RX.8.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_RX.8.Instance=DMA2_Stream5 +Dma.USART1_RX.8.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_RX.8.MemInc=DMA_MINC_ENABLE +Dma.USART1_RX.8.Mode=DMA_NORMAL +Dma.USART1_RX.8.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_RX.8.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_RX.8.Priority=DMA_PRIORITY_MEDIUM +Dma.USART1_RX.8.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART1_TX.6.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART1_TX.6.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_TX.6.Instance=DMA2_Stream7 +Dma.USART1_TX.6.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_TX.6.MemInc=DMA_MINC_ENABLE +Dma.USART1_TX.6.Mode=DMA_NORMAL +Dma.USART1_TX.6.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_TX.6.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_TX.6.Priority=DMA_PRIORITY_MEDIUM +Dma.USART1_TX.6.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART3_RX.3.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART3_RX.3.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART3_RX.3.Instance=DMA1_Stream1 +Dma.USART3_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_RX.3.MemInc=DMA_MINC_ENABLE +Dma.USART3_RX.3.Mode=DMA_NORMAL +Dma.USART3_RX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_RX.3.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_RX.3.Priority=DMA_PRIORITY_HIGH +Dma.USART3_RX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART6_RX.4.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART6_RX.4.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART6_RX.4.Instance=DMA2_Stream1 +Dma.USART6_RX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART6_RX.4.MemInc=DMA_MINC_ENABLE +Dma.USART6_RX.4.Mode=DMA_NORMAL +Dma.USART6_RX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART6_RX.4.PeriphInc=DMA_PINC_DISABLE +Dma.USART6_RX.4.Priority=DMA_PRIORITY_MEDIUM +Dma.USART6_RX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART6_TX.5.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART6_TX.5.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART6_TX.5.Instance=DMA2_Stream6 +Dma.USART6_TX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART6_TX.5.MemInc=DMA_MINC_ENABLE +Dma.USART6_TX.5.Mode=DMA_NORMAL +Dma.USART6_TX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART6_TX.5.PeriphInc=DMA_PINC_DISABLE +Dma.USART6_TX.5.Priority=DMA_PRIORITY_MEDIUM +Dma.USART6_TX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +FREERTOS.FootprintOK=true +FREERTOS.INCLUDE_pcTaskGetTaskName=1 +FREERTOS.INCLUDE_uxTaskGetStackHighWaterMark2=1 +FREERTOS.INCLUDE_vTaskCleanUpResources=1 +FREERTOS.INCLUDE_xEventGroupSetBitFromISR=1 +FREERTOS.INCLUDE_xSemaphoreGetMutexHolder=1 +FREERTOS.INCLUDE_xTaskAbortDelay=1 +FREERTOS.INCLUDE_xTaskGetCurrentTaskHandle=1 +FREERTOS.INCLUDE_xTaskGetHandle=1 +FREERTOS.IPParameters=Tasks01,FootprintOK,configENABLE_FPU,configENABLE_BACKWARD_COMPATIBILITY,configRECORD_STACK_HIGH_ADDRESS,configCHECK_FOR_STACK_OVERFLOW,configGENERATE_RUN_TIME_STATS,configUSE_STATS_FORMATTING_FUNCTIONS,configTOTAL_HEAP_SIZE,INCLUDE_xTaskGetCurrentTaskHandle,INCLUDE_xTaskGetHandle,INCLUDE_uxTaskGetStackHighWaterMark2,INCLUDE_xEventGroupSetBitFromISR,INCLUDE_xTaskAbortDelay,INCLUDE_pcTaskGetTaskName,INCLUDE_xSemaphoreGetMutexHolder,INCLUDE_vTaskCleanUpResources,configUSE_APPLICATION_TASK_TAG +FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2 +FREERTOS.configENABLE_BACKWARD_COMPATIBILITY=0 +FREERTOS.configENABLE_FPU=1 +FREERTOS.configGENERATE_RUN_TIME_STATS=1 +FREERTOS.configRECORD_STACK_HIGH_ADDRESS=1 +FREERTOS.configTOTAL_HEAP_SIZE=0x10000 +FREERTOS.configUSE_APPLICATION_TASK_TAG=0 +FREERTOS.configUSE_STATS_FORMATTING_FUNCTIONS=1 +File.Version=6 +GPIO.groupedBy=Group By Peripherals +I2C1.I2C_Mode=I2C_Fast +I2C1.IPParameters=I2C_Mode +I2C2.I2C_Mode=I2C_Fast +I2C2.IPParameters=I2C_Mode +I2C3.I2C_Mode=I2C_Fast +I2C3.IPParameters=I2C_Mode +KeepUserPlacement=false +Mcu.CPN=STM32F407IGH6 +Mcu.Family=STM32F4 +Mcu.IP0=ADC1 +Mcu.IP1=ADC3 +Mcu.IP10=NVIC +Mcu.IP11=RCC +Mcu.IP12=RNG +Mcu.IP13=SPI1 +Mcu.IP14=SPI2 +Mcu.IP15=SYS +Mcu.IP16=TIM1 +Mcu.IP17=TIM3 +Mcu.IP18=TIM4 +Mcu.IP19=TIM5 +Mcu.IP2=CAN1 +Mcu.IP20=TIM7 +Mcu.IP21=TIM8 +Mcu.IP22=TIM10 +Mcu.IP23=USART1 +Mcu.IP24=USART3 +Mcu.IP25=USART6 +Mcu.IP26=USB_DEVICE +Mcu.IP27=USB_OTG_FS +Mcu.IP3=CAN2 +Mcu.IP4=CRC +Mcu.IP5=DMA +Mcu.IP6=FREERTOS +Mcu.IP7=I2C1 +Mcu.IP8=I2C2 +Mcu.IP9=I2C3 +Mcu.IPNb=28 +Mcu.Name=STM32F407I(E-G)Hx +Mcu.Package=UFBGA176 +Mcu.Pin0=PB8 +Mcu.Pin1=PB5 +Mcu.Pin10=PD0 +Mcu.Pin11=PC11 +Mcu.Pin12=PC10 +Mcu.Pin13=PA12 +Mcu.Pin14=PI6 +Mcu.Pin15=PG9 +Mcu.Pin16=PD1 +Mcu.Pin17=PA11 +Mcu.Pin18=PF0 +Mcu.Pin19=PA9 +Mcu.Pin2=PG14 +Mcu.Pin20=PC9 +Mcu.Pin21=PA8 +Mcu.Pin22=PH0-OSC_IN +Mcu.Pin23=PC8 +Mcu.Pin24=PH1-OSC_OUT +Mcu.Pin25=PF1 +Mcu.Pin26=PC6 +Mcu.Pin27=PG6 +Mcu.Pin28=PF6 +Mcu.Pin29=PH12 +Mcu.Pin3=PB4 +Mcu.Pin30=PG3 +Mcu.Pin31=PF10 +Mcu.Pin32=PH11 +Mcu.Pin33=PH10 +Mcu.Pin34=PC0 +Mcu.Pin35=PC1 +Mcu.Pin36=PC2 +Mcu.Pin37=PD14 +Mcu.Pin38=PA0-WKUP +Mcu.Pin39=PA4 +Mcu.Pin4=PB3 +Mcu.Pin40=PC4 +Mcu.Pin41=PE13 +Mcu.Pin42=PC5 +Mcu.Pin43=PE9 +Mcu.Pin44=PE11 +Mcu.Pin45=PE14 +Mcu.Pin46=PB12 +Mcu.Pin47=PB13 +Mcu.Pin48=PA7 +Mcu.Pin49=PB0 +Mcu.Pin5=PA14 +Mcu.Pin50=PB14 +Mcu.Pin51=PB15 +Mcu.Pin52=VP_ADC1_TempSens_Input +Mcu.Pin53=VP_ADC1_Vref_Input +Mcu.Pin54=VP_CRC_VS_CRC +Mcu.Pin55=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin56=VP_RNG_VS_RNG +Mcu.Pin57=VP_SYS_VS_Systick +Mcu.Pin58=VP_TIM1_VS_ClockSourceINT +Mcu.Pin59=VP_TIM3_VS_ClockSourceINT +Mcu.Pin6=PA13 +Mcu.Pin60=VP_TIM4_VS_ClockSourceINT +Mcu.Pin61=VP_TIM5_VS_ClockSourceINT +Mcu.Pin62=VP_TIM7_VS_ClockSourceINT +Mcu.Pin63=VP_TIM8_VS_ClockSourceINT +Mcu.Pin64=VP_TIM10_VS_ClockSourceINT +Mcu.Pin65=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS +Mcu.Pin7=PB9 +Mcu.Pin8=PB7 +Mcu.Pin9=PB6 +Mcu.PinsNb=66 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F407IGHx +MxCube.Version=6.15.0 +MxDb.Version=DB.6.0.150 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.CAN1_RX0_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.CAN1_RX1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.CAN1_TX_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.CAN2_RX0_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.CAN2_RX1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.CAN2_TX_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.DMA1_Stream1_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream7_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream1_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream2_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream3_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream6_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream7_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.EXTI0_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.EXTI3_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.EXTI4_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.EXTI9_5_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.OTG_FS_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:true\:false\:true\:false +NVIC.TIM1_BRK_TIM9_IRQn=true\:5\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TIM7_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.USART6_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:true\:false\:true\:false\:false\:false\:false +PA0-WKUP.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +PA0-WKUP.GPIO_Label=USER_KEY +PA0-WKUP.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PA0-WKUP.GPIO_PuPd=GPIO_PULLUP +PA0-WKUP.Locked=true +PA0-WKUP.Signal=GPXTI0 +PA11.Mode=Device_Only +PA11.Signal=USB_OTG_FS_DM +PA12.Mode=Device_Only +PA12.Signal=USB_OTG_FS_DP +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA4.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label +PA4.GPIO_Label=ACCL_CS +PA4.GPIO_PuPd=GPIO_PULLUP +PA4.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM +PA4.Locked=true +PA4.PinState=GPIO_PIN_SET +PA4.Signal=GPIO_Output +PA7.GPIOParameters=GPIO_PuPd +PA7.GPIO_PuPd=GPIO_PULLUP +PA7.Locked=true +PA7.Mode=Full_Duplex_Master +PA7.Signal=SPI1_MOSI +PA8.GPIOParameters=GPIO_Pu +PA8.GPIO_Pu=GPIO_PULLUP +PA8.Locked=true +PA8.Mode=I2C +PA8.Signal=I2C3_SCL +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB0.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label +PB0.GPIO_Label=GYRO_CS +PB0.GPIO_PuPd=GPIO_PULLUP +PB0.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM +PB0.Locked=true +PB0.PinState=GPIO_PIN_SET +PB0.Signal=GPIO_Output +PB12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label +PB12.GPIO_Label=SPI2_CS +PB12.GPIO_PuPd=GPIO_PULLUP +PB12.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM +PB12.Locked=true +PB12.PinState=GPIO_PIN_SET +PB12.Signal=GPIO_Output +PB13.GPIOParameters=GPIO_PuPd +PB13.GPIO_PuPd=GPIO_PULLUP +PB13.Locked=true +PB13.Mode=Full_Duplex_Master +PB13.Signal=SPI2_SCK +PB14.GPIOParameters=GPIO_PuPd +PB14.GPIO_PuPd=GPIO_PULLUP +PB14.Locked=true +PB14.Mode=Full_Duplex_Master +PB14.Signal=SPI2_MISO +PB15.GPIOParameters=GPIO_PuPd +PB15.GPIO_PuPd=GPIO_PULLUP +PB15.Locked=true +PB15.Mode=Full_Duplex_Master +PB15.Signal=SPI2_MOSI +PB3.GPIOParameters=GPIO_PuPd +PB3.GPIO_PuPd=GPIO_PULLUP +PB3.Locked=true +PB3.Mode=Full_Duplex_Master +PB3.Signal=SPI1_SCK +PB4.GPIOParameters=GPIO_PuPd +PB4.GPIO_PuPd=GPIO_PULLUP +PB4.Locked=true +PB4.Mode=Full_Duplex_Master +PB4.Signal=SPI1_MISO +PB5.Locked=true +PB5.Mode=CAN_Activate +PB5.Signal=CAN2_RX +PB6.Locked=true +PB6.Mode=CAN_Activate +PB6.Signal=CAN2_TX +PB7.Locked=true +PB7.Mode=Asynchronous +PB7.Signal=USART1_RX +PB8.GPIOParameters=GPIO_Pu +PB8.GPIO_Pu=GPIO_PULLUP +PB8.Locked=true +PB8.Mode=I2C +PB8.Signal=I2C1_SCL +PB9.GPIOParameters=GPIO_Pu +PB9.GPIO_Pu=GPIO_PULLUP +PB9.Locked=true +PB9.Mode=I2C +PB9.Signal=I2C1_SDA +PC0.GPIOParameters=GPIO_Label +PC0.GPIO_Label=HW0 +PC0.Locked=true +PC0.Signal=GPIO_Input +PC1.GPIOParameters=GPIO_Label +PC1.GPIO_Label=HW1 +PC1.Locked=true +PC1.Signal=GPIO_Input +PC10.Locked=true +PC10.Mode=Asynchronous +PC10.Signal=USART3_TX +PC11.Locked=true +PC11.Mode=Asynchronous +PC11.Signal=USART3_RX +PC2.GPIOParameters=GPIO_Label +PC2.GPIO_Label=HW2 +PC2.Locked=true +PC2.Signal=GPIO_Input +PC4.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +PC4.GPIO_Label=ACCL_INT +PC4.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PC4.GPIO_PuPd=GPIO_PULLUP +PC4.Locked=true +PC4.Signal=GPXTI4 +PC5.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +PC5.GPIO_Label=GYRO_INT +PC5.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PC5.GPIO_PuPd=GPIO_PULLUP +PC5.Locked=true +PC5.Signal=GPXTI5 +PC6.GPIOParameters=GPIO_Speed,GPIO_PuPd +PC6.GPIO_PuPd=GPIO_PULLUP +PC6.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PC6.Locked=true +PC6.Signal=S_TIM8_CH1 +PC8.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PC8.GPIO_Label=LASER +PC8.GPIO_PuPd=GPIO_PULLUP +PC8.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PC8.Locked=true +PC8.Signal=S_TIM3_CH3 +PC9.GPIOParameters=GPIO_Pu +PC9.GPIO_Pu=GPIO_PULLUP +PC9.Locked=true +PC9.Mode=I2C +PC9.Signal=I2C3_SDA +PD0.Locked=true +PD0.Mode=CAN_Activate +PD0.Signal=CAN1_RX +PD1.Locked=true +PD1.Mode=CAN_Activate +PD1.Signal=CAN1_TX +PD14.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PD14.GPIO_Label=BUZZER +PD14.GPIO_PuPd=GPIO_PULLUP +PD14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH +PD14.Locked=true +PD14.Signal=S_TIM4_CH3 +PE11.GPIOParameters=GPIO_Speed,GPIO_PuPd +PE11.GPIO_PuPd=GPIO_PULLUP +PE11.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PE11.Locked=true +PE11.Signal=S_TIM1_CH2 +PE13.GPIOParameters=GPIO_Speed,GPIO_PuPd +PE13.GPIO_PuPd=GPIO_PULLUP +PE13.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PE13.Locked=true +PE13.Signal=S_TIM1_CH3 +PE14.GPIOParameters=GPIO_Speed,GPIO_PuPd +PE14.GPIO_PuPd=GPIO_PULLUP +PE14.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PE14.Locked=true +PE14.Signal=S_TIM1_CH4 +PE9.GPIOParameters=GPIO_Speed,GPIO_PuPd +PE9.GPIO_PuPd=GPIO_PULLUP +PE9.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PE9.Locked=true +PE9.Signal=S_TIM1_CH1 +PF0.GPIOParameters=GPIO_Pu +PF0.GPIO_Pu=GPIO_PULLUP +PF0.Locked=true +PF0.Mode=I2C +PF0.Signal=I2C2_SDA +PF1.GPIOParameters=GPIO_Pu +PF1.GPIO_Pu=GPIO_PULLUP +PF1.Locked=true +PF1.Mode=I2C +PF1.Signal=I2C2_SCL +PF10.GPIOParameters=GPIO_Label +PF10.GPIO_Label=ADC_BAT +PF10.Locked=true +PF10.Mode=IN8 +PF10.Signal=ADC3_IN8 +PF6.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PF6.GPIO_Label=IMU_HEAT_PWM +PF6.GPIO_PuPd=GPIO_PULLDOWN +PF6.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PF6.Locked=true +PF6.Signal=S_TIM10_CH1 +PG14.Locked=true +PG14.Mode=Asynchronous +PG14.Signal=USART6_TX +PG3.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +PG3.GPIO_Label=CMPS_INT +PG3.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PG3.GPIO_PuPd=GPIO_PULLUP +PG3.Locked=true +PG3.Signal=GPXTI3 +PG6.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label +PG6.GPIO_Label=CMPS_RST +PG6.GPIO_PuPd=GPIO_PULLUP +PG6.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM +PG6.Locked=true +PG6.PinState=GPIO_PIN_RESET +PG6.Signal=GPIO_Output +PG9.Locked=true +PG9.Mode=Asynchronous +PG9.Signal=USART6_RX +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PH10.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PH10.GPIO_Label=LED_B +PH10.GPIO_PuPd=GPIO_PULLUP +PH10.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PH10.Locked=true +PH10.Signal=S_TIM5_CH1 +PH11.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PH11.GPIO_Label=LED_G +PH11.GPIO_PuPd=GPIO_PULLUP +PH11.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PH11.Locked=true +PH11.Signal=S_TIM5_CH2 +PH12.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PH12.GPIO_Label=LED_R +PH12.GPIO_PuPd=GPIO_PULLUP +PH12.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PH12.Locked=true +PH12.Signal=S_TIM5_CH3 +PI6.GPIOParameters=GPIO_Speed,GPIO_PuPd +PI6.GPIO_PuPd=GPIO_PULLUP +PI6.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PI6.Signal=S_TIM8_CH2 +PinOutPanel.CurrentBGAView=Top +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerLinker=GCC +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F407IGHx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.28.3 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=true +ProjectManager.HeapSize=0x1000 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=DevC.ioc +ProjectManager.ProjectName=DevC +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x1000 +ProjectManager.TargetToolchain=CMake +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC3_Init-ADC3-false-HAL-true,6-MX_CAN1_Init-CAN1-false-HAL-true,7-MX_CAN2_Init-CAN2-false-HAL-true,8-MX_I2C1_Init-I2C1-false-HAL-true,9-MX_SPI1_Init-SPI1-false-HAL-true,10-MX_TIM4_Init-TIM4-false-HAL-true,11-MX_TIM5_Init-TIM5-false-HAL-true,12-MX_USART3_UART_Init-USART3-false-HAL-true,13-MX_TIM8_Init-TIM8-false-HAL-true,14-MX_CRC_Init-CRC-false-HAL-true,15-MX_RNG_Init-RNG-false-HAL-true,16-MX_I2C2_Init-I2C2-false-HAL-true,17-MX_I2C3_Init-I2C3-false-HAL-true,18-MX_SPI2_Init-SPI2-false-HAL-true,19-MX_TIM1_Init-TIM1-false-HAL-true,20-MX_TIM3_Init-TIM3-false-HAL-true,21-MX_TIM10_Init-TIM10-false-HAL-true,22-MX_USART1_UART_Init-USART1-false-HAL-true,23-MX_USART6_UART_Init-USART6-false-HAL-true,24-MX_TIM7_Init-TIM7-false-HAL-true,25-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false +RCC.48MHZClocksFreq_Value=48000000 +RCC.AHBFreq_Value=168000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=42000000 +RCC.APB1TimFreq_Value=84000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=84000000 +RCC.APB2TimFreq_Value=168000000 +RCC.CortexFreq_Value=168000000 +RCC.EthernetFreq_Value=168000000 +RCC.FCLKCortexFreq_Value=168000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=168000000 +RCC.HSE_VALUE=12000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=192000000 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,RCC_RTC_Clock_Source,RCC_RTC_Clock_SourceVirtual,RCC_RTC_Clock_Source_FROM_HSE,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=168000000 +RCC.PLLCLKFreq_Value=168000000 +RCC.PLLM=6 +RCC.PLLN=168 +RCC.PLLQ=7 +RCC.PLLQCLKFreq_Value=48000000 +RCC.RCC_RTC_Clock_Source=RCC_RTCCLKSOURCE_LSI +RCC.RCC_RTC_Clock_SourceVirtual=RCC_RTCCLKSOURCE_HSE_DIV30 +RCC.RCC_RTC_Clock_Source_FROM_HSE=RCC_RTCCLKSOURCE_HSE_DIV30 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=400000 +RCC.SYSCLKFreq_VALUE=168000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=336000000 +RCC.VcooutputI2S=192000000 +SH.GPXTI0.0=GPIO_EXTI0 +SH.GPXTI0.ConfNb=1 +SH.GPXTI3.0=GPIO_EXTI3 +SH.GPXTI3.ConfNb=1 +SH.GPXTI4.0=GPIO_EXTI4 +SH.GPXTI4.ConfNb=1 +SH.GPXTI5.0=GPIO_EXTI5 +SH.GPXTI5.ConfNb=1 +SH.S_TIM10_CH1.0=TIM10_CH1,PWM Generation1 CH1 +SH.S_TIM10_CH1.ConfNb=1 +SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1 +SH.S_TIM1_CH1.ConfNb=1 +SH.S_TIM1_CH2.0=TIM1_CH2,PWM Generation2 CH2 +SH.S_TIM1_CH2.ConfNb=1 +SH.S_TIM1_CH3.0=TIM1_CH3,PWM Generation3 CH3 +SH.S_TIM1_CH3.ConfNb=1 +SH.S_TIM1_CH4.0=TIM1_CH4,PWM Generation4 CH4 +SH.S_TIM1_CH4.ConfNb=1 +SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3 +SH.S_TIM3_CH3.ConfNb=1 +SH.S_TIM4_CH3.0=TIM4_CH3,PWM Generation3 CH3 +SH.S_TIM4_CH3.ConfNb=1 +SH.S_TIM5_CH1.0=TIM5_CH1,PWM Generation1 CH1 +SH.S_TIM5_CH1.ConfNb=1 +SH.S_TIM5_CH2.0=TIM5_CH2,PWM Generation2 CH2 +SH.S_TIM5_CH2.ConfNb=1 +SH.S_TIM5_CH3.0=TIM5_CH3,PWM Generation3 CH3 +SH.S_TIM5_CH3.ConfNb=1 +SH.S_TIM8_CH1.0=TIM8_CH1,PWM Generation1 CH1 +SH.S_TIM8_CH1.ConfNb=1 +SH.S_TIM8_CH2.0=TIM8_CH2,PWM Generation2 CH2 +SH.S_TIM8_CH2.ConfNb=1 +SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16 +SPI1.CLKPhase=SPI_PHASE_2EDGE +SPI1.CLKPolarity=SPI_POLARITY_HIGH +SPI1.CalculateBaudRate=5.25 MBits/s +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualType=VM_MASTER +SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_64 +SPI2.CLKPhase=SPI_PHASE_1EDGE +SPI2.CLKPolarity=SPI_POLARITY_LOW +SPI2.CalculateBaudRate=656.25 KBits/s +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualType=VM_MASTER +TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 +TIM1.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,Period,Prescaler,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2,Pulse-PWM Generation3 CH3,Pulse-PWM Generation4 CH4 +TIM1.Period=19999 +TIM1.Prescaler=167 +TIM1.Pulse-PWM\ Generation1\ CH1=0 +TIM1.Pulse-PWM\ Generation2\ CH2=0 +TIM1.Pulse-PWM\ Generation3\ CH3=0 +TIM1.Pulse-PWM\ Generation4\ CH4=1000 +TIM10.Channel=TIM_CHANNEL_1 +TIM10.IPParameters=Channel,Period +TIM10.Period=4999 +TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM3.IPParameters=Channel-PWM Generation3 CH3,Period +TIM3.Period=65535 +TIM4.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM4.IPParameters=Channel-PWM Generation3 CH3,Prescaler,Period +TIM4.Period=65535 +TIM4.Prescaler=167 +TIM5.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM5.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM5.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM5.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Prescaler,Period +TIM5.Period=65535 +TIM5.Prescaler=0 +TIM7.IPParameters=Period,Prescaler +TIM7.Period=9 +TIM7.Prescaler=83 +TIM8.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM8.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM8.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Prescaler,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2 +TIM8.Period=19999 +TIM8.Prescaler=167 +TIM8.Pulse-PWM\ Generation1\ CH1=1000 +TIM8.Pulse-PWM\ Generation2\ CH2=1000 +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +USART3.BaudRate=100000 +USART3.IPParameters=VirtualMode,BaudRate,Parity,Mode +USART3.Mode=MODE_RX +USART3.Parity=PARITY_EVEN +USART3.VirtualMode=VM_ASYNC +USART6.IPParameters=VirtualMode +USART6.VirtualMode=VM_ASYNC +USB_DEVICE.CLASS_NAME_FS=CDC +USB_DEVICE.IPParameters=VirtualMode-CDC_FS,VirtualModeFS,CLASS_NAME_FS +USB_DEVICE.VirtualMode-CDC_FS=Cdc +USB_DEVICE.VirtualModeFS=Cdc_FS +USB_OTG_FS.IPParameters=VirtualMode +USB_OTG_FS.VirtualMode=Device_Only +VP_ADC1_TempSens_Input.Mode=IN-TempSens +VP_ADC1_TempSens_Input.Signal=ADC1_TempSens_Input +VP_ADC1_Vref_Input.Mode=IN-Vrefint +VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input +VP_CRC_VS_CRC.Mode=CRC_Activate +VP_CRC_VS_CRC.Signal=CRC_VS_CRC +VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 +VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 +VP_RNG_VS_RNG.Mode=RNG_Activate +VP_RNG_VS_RNG.Signal=RNG_VS_RNG +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM10_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM10_VS_ClockSourceINT.Signal=TIM10_VS_ClockSourceINT +VP_TIM1_VS_ClockSourceINT.Mode=Internal +VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT +VP_TIM3_VS_ClockSourceINT.Mode=Internal +VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT +VP_TIM4_VS_ClockSourceINT.Mode=Internal +VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT +VP_TIM5_VS_ClockSourceINT.Mode=Internal +VP_TIM5_VS_ClockSourceINT.Signal=TIM5_VS_ClockSourceINT +VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT +VP_TIM8_VS_ClockSourceINT.Mode=Internal +VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT +VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS +VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS +board=custom +rtos.0.ip=FREERTOS diff --git a/assets/User_code/task/template_task/atti_esti.c b/assets/User_code/task/template_task/atti_esti.c new file mode 100644 index 0000000..61d2181 --- /dev/null +++ b/assets/User_code/task/template_task/atti_esti.c @@ -0,0 +1,93 @@ +/* + atti_esti Task + 带有pwm温控的纯陀螺仪(BMI088)姿态解算任务(无磁力计,赛场环境一般不适用)。 + 控制IMU加热到指定温度防止温漂,收集IMU数据给AHRS算法。 + 收集BMI088的数据,解算后得到四元数,转换为欧拉角之后放到消息队列中, + 等待其他任务取用。 + 陀螺仪使用前需要校准,校准结果保存在bmi088_cali结构体中,需要自行实现。 +*/ + +/* Includes ----------------------------------------------------------------- */ +#include "task/user_task.h" +/* USER INCLUDE BEGIN */ + +#include "bsp/mm.h" +#include "bsp/pwm.h" +#include "component/ahrs.h" +#include "component/pid.h" +#include "device/bmi088.h" +/* USER INCLUDE END */ + +/* Private typedef ---------------------------------------------------------- */ +/* Private define ----------------------------------------------------------- */ +/* Private macro ------------------------------------------------------------ */ +/* Private variables -------------------------------------------------------- */ +/* USER STRUCT BEGIN */ +BMI088_t bmi088; +AHRS_t gimbal_ahrs; +AHRS_Magn_t magn; +AHRS_Eulr_t eulr_to_send; +KPID_t imu_temp_ctrl_pid; + +/*默认校准参数*/ +BMI088_Cali_t cali_bmi088 = { + .gyro_offset = {0.0f, 0.0f, 0.0f}, +}; + +static const KPID_Params_t imu_temp_ctrl_pid_param = { + .k = 0.15f, + .p = 1.0f, + .i = 0.0f, + .d = 0.0f, + .i_limit = 1.0f, + .out_limit = 1.0f, +}; + +/* USER STRUCT END */ + +/* Private function --------------------------------------------------------- */ +/* Exported functions ------------------------------------------------------- */ +void Task_atti_esti(void *argument) { + (void)argument; /* 未使用argument,消除警告 */ + + + osDelay(ATTI_ESTI_INIT_DELAY); /* 延时一段时间再开启任务 */ + + /* USER CODE INIT BEGIN */ + BMI088_Init(&bmi088, &cali_bmi088); + AHRS_Init(&gimbal_ahrs, &magn, BMI088_GetUpdateFreq(&bmi088)); + PID_Init(&imu_temp_ctrl_pid, KPID_MODE_NO_D, + 1.0f / BMI088_GetUpdateFreq(&bmi088), &imu_temp_ctrl_pid_param); + BSP_PWM_Start(BSP_PWM_IMU_HEAT); + + /* USER CODE INIT END */ + + while (1) { + /* USER CODE BEGIN */ + BMI088_WaitNew(); + BMI088_AcclStartDmaRecv(); + BMI088_AcclWaitDmaCplt(); + + BMI088_GyroStartDmaRecv(); + BMI088_GyroWaitDmaCplt(); + + /* 锁住RTOS内核防止数据解析过程中断,造成错误 */ + osKernelLock(); + /* 接收完所有数据后,把数据从原始字节加工成方便计算的数据 */ + BMI088_ParseAccl(&bmi088); + BMI088_ParseGyro(&bmi088); + + /* 根据设备接收到的数据进行姿态解析 */ + AHRS_Update(&gimbal_ahrs, &bmi088.accl, &bmi088.gyro, &magn); + + /* 根据解析出来的四元数计算欧拉角 */ + AHRS_GetEulr(&eulr_to_send, &gimbal_ahrs); + osKernelUnlock(); + + BSP_PWM_SetComp(BSP_PWM_IMU_HEAT, PID_Calc(&imu_temp_ctrl_pid, 40.5f, + bmi088.temp, 0.0f, 0.0f)); + + /* USER CODE END */ + } + +} \ No newline at end of file diff --git a/assets/User_code/task/template_task/task.yaml b/assets/User_code/task/template_task/task.yaml new file mode 100644 index 0000000..5a6d279 --- /dev/null +++ b/assets/User_code/task/template_task/task.yaml @@ -0,0 +1,18 @@ +atti_esti: + name: "atti_esti" + frequency: 1000 + delay: 100 + stack: 512 + freq_control: false + description: | + 带有PWM温控的纯陀螺仪(BMI088)姿态解算任务 + 功能特点: + - 控制IMU加热到指定温度防止温漂 + - 收集BMI088数据给AHRS算法进行姿态解算 + - 解算后得到四元数,转换为欧拉角放到消息队列 + - 使用PID控制IMU温度到40.5°C + - 运行频率1000Hz,提供高精度姿态信息 + 注意事项: + - 陀螺仪使用前需要校准,校准结果保存在bmi088_cali结构体中 + - 无磁力计版本,适用于干净的电磁环境 + - 需要配置PWM通道用于IMU加热控制