高云GW1NSR-4C开发板M3硬核应用
1.M3硬核IP下载:Embedded M3 Hard Core in GW1NS-4C - 科技 - 广东高云半导体科技股份有限公司 (gowinsemi.com.cn)
特别说明:IDE必须是1.9.9及以后版本,1.9.8会导致编译失败(1.9.8下1.1.3版本IP核可用)
以下根据官方提供的开发包,在GW1NSR-4C开发板上实现8个led点灯及串口通信测试。
2.FPGA综合:
解压文件,打开\Gowin_EMPU(GW1NS-4C)_V1.2\solution\running_in_sram_from_emb_userflash\ref_design\FPGA_RefDesign\DK_START_GW1NSR4C_QN48P_V1.1\gowin_empu下工程,添加器件GW1NSR-4C,正常的话应该可以综合(Synthesize)。
由于板卡实际晶振为27M,且需要点亮8个led,串口引脚也需要重新配置,故作出一定修改。修改gowin_pllvr.v文件,相关参数更改如下:
defparam pllvr_inst.FCLKIN = "27";
defparam pllvr_inst.DYN_IDIV_SEL = "false";
defparam pllvr_inst.IDIV_SEL = 8;
defparam pllvr_inst.DYN_FBDIV_SEL = "false";
defparam pllvr_inst.FBDIV_SEL = 25;
defparam pllvr_inst.DYN_ODIV_SEL = "false";
defparam pllvr_inst.ODIV_SEL = 8;
defparam pllvr_inst.PSDA_SEL = "0000";
defparam pllvr_inst.DYN_DA_EN = "true";
defparam pllvr_inst.DUTYDA_SEL = "1000";
defparam pllvr_inst.CLKOUT_FT_DIR = 1'b1;
defparam pllvr_inst.CLKOUTP_FT_DIR = 1'b1;
defparam pllvr_inst.CLKOUT_DLY_STEP = 0;
defparam pllvr_inst.CLKOUTP_DLY_STEP = 0;
defparam pllvr_inst.CLKFB_SEL = "internal";
defparam pllvr_inst.CLKOUT_BYPASS = "false";
defparam pllvr_inst.CLKOUTP_BYPASS = "false";
defparam pllvr_inst.CLKOUTD_BYPASS = "false";
defparam pllvr_inst.DYN_SDIV_SEL = 2;
defparam pllvr_inst.CLKOUTD_SRC = "CLKOUT";
defparam pllvr_inst.CLKOUTD3_SRC = "CLKOUT";
defparam pllvr_inst.DEVICE = "GW1NSR-4C";
修改gowin_empu_template.v文件:
//sys_clk max 78MHz
//GPIO
//UART0`resetallmodule Gowin_EMPU_Template (sys_clk,reset_n,led,uart0_rxd,uart0_txd
);input sys_clk;
input reset_n;//GPIO
output [7:0] led;//UART0
input uart0_rxd;
output uart0_txd;/*--------------------Gowin_EMPU_Top---------------------------*/
wire mclk; //mcu clock
wire clkin = sys_clk;
wire [7:0] gpioout_o;
wire [15:0] gpioouten_o;//MCU system clock = 78MHz
Gowin_PLLVR u_Gowin_PLLVR(.clkout(mclk), //MCU 78MHz.clkin(clkin) //input clkin 27MHz
);Gowin_EMPU_Top u_Gowin_EMPU_Top (.sys_clk(mclk),.reset_n(reset_n),//GPIO.gpioin(16'h0000),.gpioout({gpioout_o,led}),.gpioouten(gpioouten_o),//UART0.uart0_rxd(uart0_rxd),.uart0_txd(uart0_txd)
);endmodule
修改引脚约束文件:
//MCU system clock
IO_LOC "sys_clk" 22;//F_CLK
IO_PORT "sys_clk" IO_TYPE=LVCMOS18;//MCU system reset
IO_LOC "reset_n" 23;//KEY2
IO_PORT "reset_n" IO_TYPE=LVCMOS25;//LED
IO_LOC "led[7]" 34;
IO_PORT "led[7]" IO_TYPE=LVCMOS25;
IO_LOC "led[6]" 35;
IO_PORT "led[6]" IO_TYPE=LVCMOS25;
IO_LOC "led[5]" 31;
IO_PORT "led[5]" IO_TYPE=LVCMOS25;
IO_LOC "led[4]" 32;
IO_PORT "led[4]" IO_TYPE=LVCMOS25;
IO_LOC "led[3]" 29;
IO_PORT "led[3]" IO_TYPE=LVCMOS25;
IO_LOC "led[2]" 30;
IO_PORT "led[2]" IO_TYPE=LVCMOS25;
IO_LOC "led[1]" 27;
IO_PORT "led[1]" IO_TYPE=LVCMOS25;
IO_LOC "led[0]" 28;
IO_PORT "led[0]" IO_TYPE=LVCMOS25;//UART0
IO_LOC "uart0_rxd" 45;//UART_RXD
IO_LOC "uart0_txd" 43;//UART_TXD
IO_PORT "uart0_rxd" IO_TYPE=LVCMOS25;
IO_PORT "uart0_txd" IO_TYPE=LVCMOS25;
4.MCU工程:
打开\Gowin_EMPU(GW1NS-4C)_V1.2\ref_design\MCU_RefDesign\Keil_RefDesign\uart\PROJECT下的Keil工程,在此基础上修改main.c文件,波特率改为14400bps。:
/* Includes ------------------------------------------------------------------*/
#include "gw1ns4c.h"
#include <stdio.h>
/* Declarations ------------------------------------------------------------------*/
void UartInit(void);
void delay_ms(__IO uint32_t delay_ms);
void GPIOInit(void);
/* Functions ------------------------------------------------------------------*/
int main()
{
SystemInit(); //Initializes system
UartInit(); //Initializes UART0
GPIOInit(); //Initializes GPIO
printf("\nUart Initialed!\r\n");
printf("\n");
while(1)
{
GPIO_ResetBit(GPIO0, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//|GPIO_Pin_1|GPIO_Pin_2); //LED on
printf("Led ON\r\n");
delay_ms(1000);
GPIO_SetBit(GPIO0, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//|GPIO_Pin_1|GPIO_Pin_2); //LED off
printf("Led OFF\r\n");
delay_ms(1000);
}
}
//Initializes UART0
void UartInit(void)
{
UART_InitTypeDef UART_InitStruct;
UART_InitStruct.UART_Mode.UARTMode_Tx = ENABLE;
UART_InitStruct.UART_Mode.UARTMode_Rx = ENABLE;
UART_InitStruct.UART_Int.UARTInt_Tx = DISABLE;
UART_InitStruct.UART_Int.UARTInt_Rx = DISABLE;
UART_InitStruct.UART_Ovr.UARTOvr_Tx = DISABLE;
UART_InitStruct.UART_Ovr.UARTOvr_Rx = DISABLE;
UART_InitStruct.UART_Hstm = DISABLE;
UART_InitStruct.UART_BaudRate = 14400;//Baud Rate
UART_Init(UART0,&UART_InitStruct);
}
//delay ms
void delay_ms(__IO uint32_t delay_ms)
{
for(delay_ms=(SystemCoreClock/16000)*delay_ms; delay_ms != 0; delay_ms--);
}
//Initializes GPIO
void GPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitType;
GPIO_InitType.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitType.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitType.GPIO_Int = GPIO_Int_Disable;
GPIO_Init(GPIO0,&GPIO_InitType);
}
如下图,在编译时,Option for Target 'uart'->User->After Build/Rebuild->Run#1处的D:\Keil_v5目录,根据个人实际进行修改,例如本人的为E:\Keil_v5\。
5.下载:
选择“MCU Mode”,如下图,需要两个文件:“.fs”FPGA文件和".bin"单片机文件。完成后需要长按Reset按键(即核心板上靠近中间的按键,23引脚)。分别接上led和USB-TTL,可以看出8个led按照约1秒的间隔时间闪烁,串口调试助手则交替收到“Led ON”和“Led OFF”。


6.完整的工程文件:
https://download.csdn.net/download/weixin_41784968/88614259
https://download.csdn.net/download/weixin_41784968/88614264
相关文章:
高云GW1NSR-4C开发板M3硬核应用
1.M3硬核IP下载:Embedded M3 Hard Core in GW1NS-4C - 科技 - 广东高云半导体科技股份有限公司 (gowinsemi.com.cn) 特别说明:IDE必须是1.9.9及以后版本,1.9.8会导致编译失败(1.9.8下1.1.3版本IP核可用) 以下根据官方…...
【RTOS学习】模拟实现任务切换 | 寄存器和栈的变化
🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 目录 🏀认识任务切换🏐切换的实质🏐栈中的内容🏐切…...
1.2 轻量级数据交互格式–JSON
对于接口来说,数据交互大部分都是使用的JSON格式,我们这里说的数据,就是我们上一章里讲解HTTP协议的时候,HTTP协议结构里的实体,也就是放在body里。body里存放需要传输的数据,数据是JSON格式,然后通过HTTP协议来传输给接口,接口再以同样的方式给我们返回。理解了这一层…...
charCodeAt() 方法
charCodeAt() 是 JavaScript 中用于获取字符串指定位置字符的 Unicode 编码的方法 语法如下: str.charCodeAt(index) str:要获取字符的字符串。index:要获取的字符在字符串中的索引。返回值是一个表示给定索引处字符 Unicode 编码的整数。…...
Flask中redis的配置与使用
注意点: 在__init__.py中需要将redis_store设置成全局变量,这样方便其他文件导入 一、config.py import logging import os from datetime import timedeltafrom redis import StrictRedisclass Config:# 调试信息DEBUG TrueSECRET_KEY os.urandom(3…...
生产者与消费者模型
初识linux之线程同步与生产者消费者模型_生产者线程和消费者线程-CSDN博客 Linux线程(三)—— 多线程(生产者消费者模型、信号量、线程池)-CSDN博客...
透析回溯的模板
关卡名 认识回溯思想 我会了✔️ 内容 1.复习递归和N叉树,理解相关代码是如何实现的 ✔️ 2.理解回溯到底怎么回事 ✔️ 3.掌握如何使用回溯来解决二叉树的路径问题 ✔️ 回溯可以视为递归的拓展,很多思想和解法都与递归密切相关,在很多…...
浅谈web性能测试
什么是性能测试? web性能应该注意些什么? 性能测试,简而言之就是模仿用户对一个系统进行大批量的操作,得出系统各项性能指标和性能瓶颈,并从中发现存在的问题,通过多方协助调优的过程。而web端的性能测试…...
Qt 容器QGroupBox带有标题的组框框架
控件简介 QGroupBox 小部件提供一个带有标题的组框框架。一般与一组或者是同类型的部件一起使用。教你会用,怎么用的强大就靠你了靓仔、靓妹。 用法示例 例 qgroupbox,组框示例(难度:简单),使用 3 个 QRadioButton 单选框按钮,与QVBoxLayout(垂直布局)来展示组框的…...
Linux系统解决“Key was rejected by service”
Linux系统下加载驱动模块出现如上错误提示的原因为:此驱动未经过签名。 方法一、关闭Secure Boot 如果是物理机,需要开机进入BIOS,找到“Secure Boot”的选项,然后关闭。 如果是虚拟机,可以打开虚拟设置,…...
【C++ Primer Plus学习记录】字符函数库cctype
C从C语言继承了一个与字符相关的、非常方便的函数软件包,它可以简化诸如确定字符是否为大写字母、数字、标点符号等工作,这些函数的原型是在头文件cctype中定义的。 cctype中的字符函数 函数名称返回值isalnum()如果参数是字母或数字,该函数返…...
C# WebSocket简单使用
文章目录 前言Fleck调试工具初始化简单使用 前言 最近接到了一个需求,需要网页实现上位机的功能。那就对数据传输的实时性要求很高。那就只能用WebSocket了。这里简单说一下我的WebSocket如何搭建 Fleck C# WebSocket(Fleck) 客户端:html Winfrom Fleck Github官网…...
uni-app 一些实用的页面模板
时间倒计时 <!-- 时间倒计时 --> <template><view class"container"><view class"flex-row time-box"><view class"time-item">{{ laveTimeList[0] }}</view><text>天</text><view class&qu…...
STM32——震动传感器点亮LED灯
震动传感器简单介绍 若产品不震动,模块上的 DO 口输出高电平; 若产品震动,模块上的 DO 口输出低电平,D0-LED绿色指示灯亮。 震动传感器与STM32的接线 编程实现 需求:当震动传感器接收到震动信号时,使用中断…...
使用 Timm 库替换 YOLOv8 主干网络 | 1000+ 主干融合YOLOv8
文章目录 前言版本差异说明替换方法parse_moedl( ) 方法_predict_once( ) 方法修改 yaml ,加载主干论文引用timm 是一个包含最先进计算机视觉模型、层、工具、优化器、调度器、数据加载器、数据增强和训练/评估脚本的库。 该库内置了 700 多个预训练模型,并且设计灵活易用。…...
PHP中什么是闭包(Closure)?
在PHP中,闭包(Closure)是一种匿名函数,它可以作为变量传递、作为参数传递给其他函数,或者被作为函数的返回值。闭包可以在定义时捕获上下文中的变量,并在以后的执行中使用这些变量。闭包在处理回调函数、事…...
boost::graph学习
boost::graph API简单小结 boost::graph是boost为图算法提供的API,简单易用。 API说明 boost::add_vertex 创建一个顶点。 boost::add_edge 创建一条边。 boost::edges 获取所有的边。 boost::vertices 获取所有的顶点。 graph.operator[vertex_descriptor] 获…...
【C语言:动态内存管理】
文章目录 前言1.malloc2.free3.calloc4.realloc5.动态内存常见错误6.动态内存经典笔试题分析7.柔性数组8.C/C中的内存区域划分 前言 文章的标题是动态内存管理,那什么是动态内存管理?为什么有动态内存管理呢? 回顾一下以前学的知识ÿ…...
【Python基础】迭代器
文章目录 [toc]什么是迭代可迭代对象判断数据类型是否是可迭代类型 迭代器对可迭代对象进行迭代的本质获取可迭代对象的迭代器通过迭代器获取数据StopIteration异常 自定义迭代器__iter__()方法__next__()方法判断数据类型是否是可迭代类型自定义迭代器案例分离模式整合模式 fo…...
QVTK 可视化
#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include <vtkNew.h> // 智能指针 #include <QVTKOpenGLNativeWidget.h> #include <vtkCylinderSource.h> // 圆柱#include <vtkPolyDataMapper.h&g…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
