用C#在STM32上写第一个Hello world

随着微软放弃.Net MF ,通过C#编写STM32 平台上的程序变得渺茫, 但是, 别着急, 目前至少有两个社区在做这件事情, 传承了微软的.Net MF , 一家是 nanoframework,另外一家比较封闭的是 

GHI Electronics 地址是: https://github.com/ghi-electronics  GHI只支持自家设计生产的开发板,不支持STM32其他厂商的开发板。因此最佳选择我认为是 nanoframework。 

实现Hello World 之前, 我们需要做以下几步:

一、安装VS2019 ,在扩展菜单中搜索 nanoframework  

二、选择开发板

    选择开发板很重要, 直接意味着你是不是能完成这件事, 比如笔者, 买了三个开发板, 一个型号不对, 一个快递丢了, 最后只有一个能用, 型号是STM32F411E-DISCO,他是是ST公司推出的一款针对STM32F411设计的开发板,可帮助您探索STM32F4系列,轻松开发自己的应用,还提供有完善的资料能帮助所有初学者和有经验开发人员快速上手。STM32F411E-DISCO基于STM32F411VET6设计,集成了ST-LINK/V2仿真下载器(但仅对外提供SWD接口),免除您另外采购仿真器或下载器的麻烦;还增添了陀螺仪、电子罗盘、数字麦克风、音频解码芯片、OTG USB、 LED和按钮等外设,方便您学习开发。。详细资料你可以访问 https://www.st.com/zh/evaluation-tools/32f411ediscovery.html 来了解!

  

三、烧写nanoframework 

  1. 从ST官网下载 STM32 ST-LINK Utility 并安装到你的计算机。 

  2. 要下载文章中指定的这款开发板固件, 需要前往  https://bintray.com/nfbot/nanoframework-images-community-targets/ST_STM32F411_DISCOVERY/_latestVersion 下载, 如果其他开发板请前往 https://github.com/nanoframework/nf-Community-Targets 或者   nanoFramework 下载开发板的固件 ,  连接会最终会引导你到 JFrog Bintray 库下载预编译好的nanoframework zip压缩包,下载完成后 然后解压他。 

  3. 最好是通过两根micro USB 连接线连接, 一根是USB type A 公口,mini-B 公口,用来通过TAG连接 ST-Link调试器, 另外一根用来更好的供电, 但低电量模式也是可以的,另外一个可以是 USB type A 公口,micro-B 公口,用来补充电能。 

  4. 启动 e ST-LINK Utility 连接你的ST开发板.

  5. 使用 "full chip erase" 清除闪存.

  6. 文件中选择刚解压的压缩包中的文件 nanoBooter.hex , 然后点 "Program and verify" 按钮, 在点‘Start’按钮之前确保选中"Reset after programming" , 然后你可能可以看到 开发板上的led闪烁速度比以前较慢。 

  7. 紧接着, 打开文件nanoCLR.hex , 同样点击 "Program and verify" 按钮,并确保 "Reset after programming" 选中后再点击  "Start", 然后上传完成, MCU已经充值并且nanoCLR镜像将开始运行, 这时候LED灯不再闪烁, 

四、通过串口连接你到VS

在能通过VS调试之前,  你需要一个 串口转USB的适配器,将PA2 接在 USART2_TX, PA3 接在USART2_RX 并且将 GND 也同样接在开发板上。 我选择的设备信号是 FT232 USB UART Board (mini) , 如果你身边有同类的, 则不需要, 之所以买它是因为手头没有杜邦线,他具备如下特性:

  • 采用原装FT232RL

  • 支持Mac、Linux、Android、WinCE、Windows 7/8/8.1/10...

  • 支持3种供电模式:5V对外供电;3.3V对外供电;由外部供电(要求3.3V-5V)

  • 带3个LED:TXD LED、RXD LED、POWER LED

  • TXD、RXD、RTS#、CTS#:采用弯排针引出

  • 其余功能PIN:预留焊盘(配送排针、排座,可上插或下插接入用户系统;PIN间距支持插入万用板)

 用说明:

  • VCCIO:输出3.3V或5V(模块由USB供电,须将跳线帽跳到3.3V或5V)

  • GND:接GND

  • TXD:接MCU.RX ( 信号流向:MCU.RX << FT232 << PC.TX )

  • RXD:接MCU.TX ( 信号流向:MCU.TX >> FT232 >> PC.RX )

  • RTS:接MCU.CTS ( 信号流向:MCU.CTS << FT232 << PC.RTS )

  • CTS:接MCU.RTS ( 信号流向:MCU.RTS >> FT232 >> PC.CTS )

注意:本产品不带USB线。该模块为USB转TTL电平,切勿直连RS232电平,以免烧坏模块。我购买的型号如下图所示:

整体连接起来示意图如下:

红线接电 , 黑线接地, 橙色线接PA3, 黄色线接在PA2,

USB type A公口接笔记本, mini-B 公口从开发板上拔下来, 接在串口转USB的接口上。 

五,VS中查找设备:

启动VS2019 , 确保之前扩展已经装好, 然后在视图菜单的 其他窗口中找到 Device Explorer ,如下图所示:

插上我们的开发板, 稍等片刻后自动寻找到开发板, 如下图所示:

现在开始, 我们创建第一个项目Hello World , 

创建后, 第一件事情应该是进nuget管理器中, 将 nanoFramework.CoreLibrary  升级为 最新版本, 

如下图:

开始运行

此时, 你的第一个 在STM32上的C# Hello World 完成。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何找到Eclipse左侧项目栏

如何找到Eclipse左侧项目栏 window --> Show View --> other --> Java–> package Explorer

静态代理模式(多线程底部原理)

静态代理模式总结(线程底部原理) 真实对象和代理对象都要实现同一个接口代理对象要代理真实角色好处&#xff1a; - 代理对象可以做很多真实对象做不了的事情 - 真实对象专注做自己的事情创建静态代理模式&#xff1a;一个接口&#xff08;当前创建为函数式接口&#xff08;只…

深入async/await知多少

.net的async/await功能相信对很多人来说并不陌生了&#xff0c;有人感觉这功能很好&#xff0c;但也有人说这功能不好容易产生一些莫名其妙的死锁&#xff1b;有人说这些异步功能也有人说这是同步功能。其实在使用async/await的有多少人真的了解它们呢&#xff1f;接下来详细地…

Java中各种整形类型可以表示的范围

对于整型类型&#xff0c;Java只定义了带符号的整型&#xff0c;因此&#xff0c;最高位的bit表示符号位&#xff08;0表示正数&#xff0c;1表示负数&#xff09;。各种整型能表示的最大范围如下&#xff1a; byte&#xff1a;-128 ~ 127 short: -32768 ~ 32767 int: -214748…

Lambda表达式(多线程实现)

推导lambda表达式 Lambda表达式&#xff0c;避免匿名内部类定义过多&#xff0c;其实质属于函数式编程的概念&#xff1b; 去掉一些没有意义的代码&#xff0c;只留下核心代码&#xff1b; 当前接口为函数式接口&#xff08;任何一个接口&#xff0c;如果只包含唯一一个抽象方…

微软正式发布 gRPC-Web for .NET

今年一月份的时候&#xff0c;微软曾宣布对 gRPC-Web for .NET 的实验性支持微软实验性地对 .NET 支持 gRPC-Web&#xff0c;现在它已正式发布。gRPC 是谷歌开源的高性能、通用 RPC 框架&#xff0c;支持包括 .NET 在内的多种编程语言。它面向移动和基于 HTTP/2 标准设计&#…

Java多线程(review)

文章目录线程状态线程方法线程停止线程休眠——sleep网络延时模拟倒计时与打印当前系统时间线程礼让——yield线程强制执行——Join线程状态线程优先级守护线程不安全案例死锁Lock锁线程状态 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后&#xff0c;该线…

Java,C++四舍五入

如果要进行四舍五入&#xff0c;可以对浮点数加上0.5再强制转型&#xff1a; package HomeTest01;public class Main {public static void main(String[] args){double a 0.6;System.out.println((int)(a0.5));double b 0.4;System.out.println((int)(b0.5));}}C也同理&…

利用Azure Functions和k8s构建Serverless计算平台

题记&#xff1a;昨晚在一个技术社区直播分享了“利用Azure Functions和k8s构建Serverless计算平台”这一话题。整个分享分为4个部分&#xff1a;Serverless概念的介绍、Azure Functions的简单介绍、k8s和KEDA的介绍和最后的演示。ServerlessServerless其实包含了两种概念&…

Java格式化输出

Java还提供了格式化输出的功能。为什么要格式化输出&#xff1f;因为计算机表示的数据不一定适合人来阅读。 如果要把数据显示成我们期望的格式&#xff0c;就需要使用格式化输出的功能。格式化输出使用System.out.printf()&#xff0c;通过使用占位符%?&#xff0c;printf()…

基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

并发协作模型“生产者/消费者模式“

java提供了几个方法解决线程之间的通信问题 方法名作用wait()表示线程一直等待&#xff0c;直到其他线程通知&#xff0c;与sleep不同&#xff0c;会释放锁wait(long timeout)指定等待的毫秒数notify唤醒一个处于等待状态的线程notifyAll()唤醒同一个对象上所有调用wait()方法…

使用线程池

JDk5.0起提供了线程池相关的API&#xff1a;ExecutorService和ExecutorsExectorService&#xff1a;真正的线程池接口。常见的子类ThreadPoolExecutor void execute(Runnable command):执行任务/命令&#xff0c;没有返回值&#xff0c;一般用来执行RunnableFuturesubmit(Calla…

对 JsonConvert 的认识太肤浅了,终于还是遇到了问题

一&#xff1a;背景1. 讲故事在开始本文之前&#xff0c;真的好想做个问卷调查&#xff0c;到底有多少人和我一样&#xff0c;对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject 这两个方法上(┬&#xff3f;┬), 这样我也好结伴同行&#xff0c;不再孤单落…

Java继承-子类不可以继承父类的构造方法

子类不可以继承父类的构造方法&#xff0c;只可以调用父类的构造方法。 子类中所有的构造函数都会默认访问父类中的空参数构造函数&#xff0c;这是因为子类的构造函数内第一行都有默认的super&#xff08;&#xff09;语句。 super&#xff08;&#xff09;表示子类在初始化…

.Net微服务实战之DevOps篇

技术只是基础该系列的两篇文章《.Net微服务实战之技术选型篇》和《.Net微服务实战之技术架构分层篇》都是以技术角度出发描述微服务架构的实施。如果技术选型篇叙述的是工具&#xff0c;那么架构分层篇讲的就是技巧&#xff0c;而本篇要讨论的就是原则。一直以来我会给身边向我…

阿里云挑战赛

文章目录第一题题目&#xff1a;题解&#xff1a;第二题题目题解第三题题目题解第四题题目&#xff1a;题解第五题题目题解第六题题目题解第七题题目&#xff1a;题解第八题题目&#xff1a;题解;题解赛后出第一题 题目&#xff1a; 【单选】filter 方法意图过滤传入的订单列…

使用C#编写STM32对接物联网平台IoTSharp发送遥测数据

在之前的文章中&#xff0c; 我们阐述了如何用C#在STM32上写第一个Hello world &#xff0c; 有朋友抱怨国内介绍文章&#xff0c; 都是一个 Hello world &#xff0c; 然后再也没有音讯&#xff0c; 写到这里我想提一下我的初心&#xff0c; 那就是告诉所有人C#无所不能&…

JavaMVC之JSON

JSON 8.1、什么是JSON&#xff1f; JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式&#xff0c;目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写…