STM32
F103
C8
MCU 微控制器
MPU 微处理器
http://www.st.com/zh/microcontrollers-microprocessors/stm32f103c8.html
http://www.st.com/zh/microcontrollers-microprocessors/stm32f103.html
烧录方式分类:
ISP
(In-System Programming)
在系统编程,使用引导程序
(Bootloader)加上外围 UART
/SPI
等接口进行烧录;
USB to TTL
ICP
(In-circuit programmer)
在电路编程,使用 SWD
/JTAG
接口;
ST-Link / J-Link
IAP
(In-Application Programming)
指 MCU 可以在系统中获取新代码并对自己重新编程,即用程序
来改变程序。
STLink
仿真器 (SWD
)serial wire debugging (SWD)
serial wire viewer (SWV)
Virtual COM port (VCP)
STLink V2 仿真器
http://www.st.com/en/development-tools/st-link-v2.html
STLink V3 仿真器 (
$11
) STM32 版本 / stlink-v3minie
STLINK-V3 compact in-circuit debugger and programmer for STM32
STM32
的 STLINK-V3 紧凑型
在线调试器和编程器
http://www.st.com/en/development-tools/stlink-v3minie.html
http://mou.sr/3Wso6Vq
http://www.mouser.com/new/stmicroelectronics/stm-stlink-v3mini-programmer/
http://www.mouser.com/datasheet/2/389/stlink_v3minie-2953370.pdf
STLINK-V3 仿真器 (
$35
) 全功能版本 (STM32/STM8) / stlink-v3set
STLINK-V3 modular in-circuit debugger and programmer for STM32/STM8
STM32
/STM8
的 STLINK-V3 模块化
在线调试器和编程器
http://www.st.com/en/development-tools/stlink-v3set.html
http://mou.sr/3JQ0XrM
http://www.mouser.com/new/stmicroelectronics/stm-stlink-v3set-debugger-programmer/
http://www.mouser.com/datasheet/2/389/stlink-v3set-1848688.pdf
stlink-v3-bridge
Software API compatible with the bridge interface of STLINK-V3
兼容 STLINK-V3桥接
接口的软件API
http://www.st.com/en/development-tools/stlink-v3-bridge.html
???
http://www.mouser.com/new/stmicroelectronics/
TTL
串口下载线 (SPI
)...
STM32F103C8T6
引脚图解GPIO 引脚
PWM
I2C
SPI
CAN
Serial
Analog
GND
3.3V
5V
RESET
Vbat
DCLK
DIO
STM32F103C8T6
最小系统版
1、该例程为`GPIO`例程。
2、使用说明
(1)工程文件路径:例程目录\GPIO\MDK-ARM\Project.uvproj。
(2)请使用 `MDK` 4.0以上版本打开, MDK 版本过低会导致无法识别工程。
(3)下载调试工具为 `J-LINK`。
(4)`HEX`文件下载到板子后, `LED`灯闪烁,表明例程运行正确。
3、注意事项
请务必在下载、调试、运行过程中,保持板子`上电`、`J-LINK`连接并插在电脑上。
STM32F103CDE Performance Line Datasheet (Chinese)
http://cdn.xgqfrms.xyz/STM32/STM32F103x8B_DS_CH_V10.pdf
http://drive.google.com/file/d/16t4w6TaQAUgXrTf3Xf1nbXLGieSxY7W9/view?usp=sharing
ChatGPT
自动生成 STM32 LED点亮程序http://chat.openai.com/
#include "stm32f4xx.h" // 引入STM32F4系列的头文件
void delay(uint32_t time); // 声明延迟函数
int main(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // 启用GPIOA时钟
GPIOA->MODER |= GPIO_MODER_MODER5_0; // 将引脚A5配置为输出模式
while (1)
{
GPIOA->BSRR = GPIO_BSRR_BS_5; // 置位引脚A5,点亮LED
delay(1000000); // 延时一段时间
GPIOA->BSRR = GPIO_BSRR_BR_5; // 复位引脚A5,熄灭LED
delay(1000000); // 延时一段时间
}
}
void delay(uint32_t time)
{
while (time--);
}
写一个stm32点亮led灯的程序
#include "stm32f4xx.h" // 引入STM32F4系列的头文件
#include "stm32f4xx_gpio.h" // 引入GPIO库的头文件
#include "stm32f4xx_rcc.h" // 引入RCC库的头文件
void delay(uint32_t time); // 声明延迟函数
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 启用GPIOA时钟
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; // 设置引脚A5
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; // 设置引脚为输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // 设置引脚为推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 设置引脚的输出速度
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; // 设置引脚为无上下拉
GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
while (1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_5); // 置位引脚A5,点亮LED
delay(1000000); // 延时一段时间
GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 复位引脚A5,熄灭LED
delay(1000000); // 延时一段时间
}
}
void delay(uint32_t time)
{
while (time--);
}
使用标准库写一个stm32点亮led灯的程序
F103
系列http://www.st.com/zh/microcontrollers-microprocessors/stm32f103c8.html
http://www.st.com/zh/microcontrollers-microprocessors/stm32f103.html
STM32的
集成开发环境
STM32CubeIDE
是一体式多操作系统开发工具
,是STM32Cube
软件生态系统的一部分。
STM32CubeIDE是一种高级C/C++
开发平台,具有STM32微控制器
和微处理器
的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。
STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,以便提供一体化工具体验,并节省安装与开发时间。在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。
STM32CubeIDE包含相关构建和堆栈分析仪,能够为用户提供有关项目状态和内存要求的有用信息。
STM32CubeIDE还具有标准和高级调试功能,其中包括CPU内核寄存器、存储器和外设寄存器以及实时变量查看、串行线传输监测器接口或故障分析器的视图。
http://www.st.com/zh/development-tools/stm32cubeide.html#get-software
http://www.cnblogs.com/xgqfrms/p/17412248.html
http://www.bilibili.com/video/BV1uJ411u7GG/
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 ?️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:http://www.cnblogs.com/xgqfrms/p/17414777.html
未经授权禁止转载,违者必究!
#例12-8使用训练集和测试集,对iris数据进行分类 importnumpyasnp importmatplotlib.pyplotasplt fromsklearnimportdatasets fromsklearn.neural_networkimportMLPClassifier importpandasaspd fromsklearn.model_selectionimporttrain_test_split importjoblib iris=datasets.load_iris() #为可视化方便,取前2列作为特征属性 #print('iris的内容为:\n',iris) X=iris.data[:,:2]#不包括上限2 y=iris.target #划分训练集,测试集 X_train,X_test,y_train,y_test=train_test_split( X,y,train_size=0.8,random_state=42) hidden_n,hidden_m=10,6#隐层大小,2层,神经元数量分别为hidden_n,hidden_m cl
默认情况下,执行的所有命令的Bash命令存储在~/.bash_history、系统管理员可以查看系统上用户执行的命令列表。默认不显示命令的执行时间。>history 965ls-lR/var/log 966ls-lR/var/log 967ls-lR/var/log|grep"^-"|wc-l 968netstat-n 969netstat-n|awk'/tcp/{print$5}' 970netstat-n|awk'/tcp/{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-rn 971grep"^#\{1,\}[^]"/etc/inittab 972expr$[$RANDOM%39]+1 973ls-al 974netstat-n|awk'/^tcp/{++b[$NF]}END{for(ainb)printa,b[a]}' 975netstat-n|awk'/^tcp/{print$5}'|awk
基于本体的数据集成已成为异构遗留数据库集成服务构建的实用方法之一。但是,在每个遗留数据库的模式之上为特定的集成应用程序构建跨域本体比重用现有本体既不高效也不经济。然后问题就在于,现有的本体是否与跨域查询以及所有旧系统兼容。迫切需要一种有效的标准来评估兼容性,因为它会限制集成服务的上行质量。本文从属性的角度研究图式的语义相似性。它提供了一组深入的标准,即覆盖范围和灵活性,用于评估查询,模式和现有本体之间的兼容性。扩展了类的权重,以进行精确的兼容性计算。在实际项目中使用这些标准可以验证我们方法的适用性。原文题目:IsyourSchemaGoodEnoughtoAnswermyQuery?原文:Ontology-baseddataintegrationhasbeenoneofthepracticalmethodologiesforheterogeneouslegacydatabaseintegratedserviceconstruction.However,itisneitherefficientnoreconomicaltobuildthecross-domainontologyontop
阅读本文大概需要3.6分钟。先问你个问题,框架和库有什么区别?简单的说,框架控制你,库则由你控制,框架让你做填空题,库让你做问答题。初学Django,你觉得它是框架,用的久了,你也可以像三方库一样使用。Django之于Python,犹如Spring之于Java。Django是Python的web开发框架,既然是框架,就是一套完整的解决方案,使用框架的时候,需要把你的代码放到框架合适的地方,框架会在合适的时机调用你的代码,框架控制一切,我们只需要按照规则写代码。如果只是用Django进行Web开发,直接填空就好了。但是如果只想使用Django的部分功能,比如Django的ORM、发送邮件、模版渲染,就像使用三方库那样,直接导入相关的包来自由使用Django呢?为什么我会提出这个问题?一是因为Django的ORM足够简单和好用,二是我懒得学习其他ORM框架,原理大同小异,我先入手的Django,就想一直用Django。说多点,我倾向通用的技术,也就是一招武功走天下。Django的ORM有多好用,这里举个例子,User对象对应数据库的一张表,操作User,就是操作数据库,完全不用写sql:#
系统:Windows7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 openpyxl:2.6.2这个系列讲讲Python对Excel的操作使用openpyxl模块今天讲讲单元格边框的设置Part1:代码fromopenpyxlimportload_workbook fromopenpyxl.stylesimportBorder,Side,colors excel_address=r"E:\Coding\E_PythonWriting\Excel\openpyxl示例_7.xlsx" wb=load_workbook(excel_address) sht=wb.worksheets[0] sht["D5"]="测试" border_set=Border(left=Side(style='thick',color=colors.RED), right=Side(style='medium',c
本篇介绍多文档窗口界面的写法。代码中并未实现关闭窗口前文档未保存的提醒对话框,因为之前已有介绍。importsys fromPyQt5.QtWidgetsimport* fromPyQt5.QtCoreimportQt fromPyQt5.QtGuiimportQColor,QFont,QIcon,QKeySequence classMdiSubWindow(QMdiSubWindow): def__init__(self): super(MdiSubWindow,self).__init__() defcloseEvent(self,event): self.deleteLater()#关闭后删除 classMainWindow(QMainWindow): def__init__(self,parent=None): super(MainWindow,self).__init__(parent) #self.setAttribute(Qt.WA_DeleteOnClose) self.mdi=QMdiArea()#实例化Qmidarea区域 self.setCentralWi
来了?鹅厂小编们等你很久了!咱们闲话少叙,今天,10位小编携手为你奉上10份超级大礼:书籍、技术教程、鹅厂公仔、腾讯云代金券……每位朋友都可以免!费!参与抽奖!01技术书籍本次奖池涵盖数据分析、人工智能、编程等多个领域。一份技术人获益的典藏书单,强烈推荐,借助书籍希望大家能够由浅入深、循序渐进的学习新知,事半功倍,少走弯路。赠送书单明细请翻至文末查看哦~02实战教程鹅厂资深数据库专家录制的数据库实战视频课程,教你从青铜到王者学习数据库;小程序云开发教程,含源码,教你7天打造流量过亿的小程序,技能在身,升职加薪不要太容易。 03腾讯公仔鹅厂的公仔就不多介绍了,包邮送到家!款式不同,随机发放,图片仅供参考哦~ 04腾讯云代金券腾讯云数据库100元无门槛代金券,新购云数据库产品可直接抵现(促销产品除外)。 各位朋友,心动不如行动,领取方式见下:领奖规则1. 关注下方公众号并分别在后台回复【抽奖】,根据后台回复的提示参与抽奖。10个公众号同时参与,中奖概率增大10倍哦!2.抽奖人数:10个公众号的抽奖人数总计1000人,超高中奖概率! 3.活动时间:即日起至6月23日18:00止4.奖品发放:
前言:深度学习的初始化参数指的是在网络训练之前,对各个节点的权重和偏置进行初始化的过程,很多时候我们以为这个初始化是无关紧要的,不需要什么讲究,但是实际上,一个参数的初始化关系到网络能否训练出好的结果或者是以多快的速度收敛,这都是至关重要的,有时候因为参数初始化的缘故,甚至得不到好的训练结果。本文就来讨论一下参数初始化到底有什么讲究以及常见的参数初始化的一些策略方法。阅读本文需要神经网络相关背景,能够理解误差反向传播算法的实现过程。 目录一、参数初始化的原则1.1一些基本的储备知识1.2、参数初始化的几个基本条件1.3、关于方差的三个客观事实1.4、参数初始化的几点要求二、常见的参数初始化方法2.1、Glorot初始化方法2.2、Kaiming初始化2.3、lecun初始化2.4、BatchNormalization三、参数初始化方法的总结四、参考文献一、参数初始化的原则1.1一些基本的储备知识在总结参数初始化的原则之前,先简单看一下网络运行的过程,参数初始化的目的是使网络能够更好的训练,现在大部分的网络训练依然是采用误差的反向传播算法,误差反向传播分为正反两个过程,这里就不再赘述了,
rllabpaper:https://www.groundai.com/project/ray-rllib-a-framework-for-distributed-reinforcement-learning1917/很好地扩展到8192个核心。凭借8192个核心,我们在3.7分钟的中位时间内获得6000奖励,这是最佳公布结果的两倍大规模测试:我们评估RLlib在进化策略(ES),近端政策优化(PPO),和A3C的性能,对建立专门的系统比较特别为那些算法[OPE(2017年),黑塞等人(2017)Hesse,Plappert,Radford,Schulman,Sidor和Wu,ope(2016)]使用Redis,OpenMPI和DistributedTensorFlow。在所有实验中使用相同的超参数(包括在补充材料中)。我们使用TensorFlow为所评估的RLlib算法定义神经网络。对复杂体系结构的推广 Ape-X:Ape-X[Horgan等人(2018)Horgan,Quan,Budden,Barth-Maron,Hessel,vanHasselt和Silver]是DQN的一种变体
模板整理 二分(返回第一个等于x的元素的下标) intfound(inta[],intleft,intright,intx){ while(left<right){ intmid=(right+left)>>1; if(a[mid]<x)left=mid+1; elseright=mid; } returnleft; } 复制 链式前向星 structEdge{ intnext,to; LLdis; }edges[maxn]; voidadd_edge(intfrom,intto,LLdis){ num++; edges[num].next=head[from]; edges[num].to=to; edges[num].dis=dis; head[from]=num; } for(inti=head[u];i!=0;i=edges[i].next){ ... } 复制 邻接矩阵 structEdge{ intfrom,to,dist; //边的起点,终点,长度 Edge(intu,intv,intd):from(u),
LocalServiceController是将LocalService当作“Started”Service来使用,相对于”Bound”Service来说,这种模式用法要简单得多,LocalServiceActivities.Controller启动LocalService之后就基本上不管LocalService了 startService(newIntent(Controller.this,LocalService.class));复制 LocalService可以选择自己停止自己,本例是通过调用stopService来停止Service,如果你在本例中启动Service之后,没有stopService,这个Service将在后台一直运行,即使你退出AppDemo或是启动其它应用(屏幕上方会一直显示一个三角)。而对于LocalServiceBinding来说,情况就不同,绑定Service之后,即使你没有点击“unbindService”按钮,按“Back”键,BindingActivity退出时,Android系统会自动断开与LocalService的绑定。屏幕上方
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。 设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,jk,则所求的总和为: v[j1]*w[j1]+v[j2]*w[j2]+…+v[jk]*w[jk]。(其中*为乘号) 请你帮助金明设计一个满足要求的购物单。 输入输出格式 输入格式:输入的第1行,为两个正整数,用一个空格隔开: Nm(其中N(<30000)表示总钱数,m(<25)为希望购买物品的个数。) 从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有2个非负整数 vp(其中v表示
ECMAScript相关介绍 1、什么是ECMA ECMA(EuropeanComputerManufacturersAssociation)中文名称为欧洲计算机制造商协会。这个协会的目标是评估、开发以及认可电信的计算机的标准。1994年后该组织正式改名为Ecma国际 2、ECMAScript是什么 ECMAScript是ECMA国际通过ECMA-262标准化的脚本程序设计语言。通常被称为javascript或是JScript,但是实际上后两者是ECMA-262标准的实现和扩展。 3、什么是ECMA-262 ECMA国际制定了很多标准,ECMA-262只是其中一种标准。 所有的标准列表可以查看 http://www.ecma-international.org/publications/standards/Standard.htm 4、ECMA-262的发展历史 从ES6开始,每年都会发布一个ES新版本,版本号都会比年份最后一位大1,到目前为止最新的版本是Es11。 2020年6月16日,发布ECMA-262第11版语言规范。 ECMA-262历
Origin: http://aras-p.info/blog/2014/03/28/cross-platform-shaders-in-2014/ 简译translation: 作者在2012年写过一篇shader跨平台的文章,开始提到了并有链接. 1.手写或者宏替换 使用宏定义将 HLSL&GLSL的不同之处封装,并让每个开发人员了解他们的不同之处.例子:Valve的Source2引擎 优点:简单,容易实现缺点:每个开发者都必须熟悉使用宏定义库,还有其他语法上的不同. 2.设计自己的ShaderLangugage,并转换为HLSL/GLSL后端代码 或者使用可视化shader编辑器来动态生成HLSL/GLSL. 3.将HLSL的bytecode翻译成GLSL 优点:bytecode翻译比HLSL翻译更简单.而且M$的D3DCompile做了很好的优化,这样从优化后的bytecode,可以直接转为足够优化的GLSL. 缺点:HLSL的封闭式工具链,只能在windows上跑.HLSL的编译器做的优化可能太过,有些优化
LoadLibrary加载dll失败 对于dll加载失败的问题通常可以使用两种方式解决: 使用dependency查看工具,查看有没有dll依赖异常的情况,工具链接见:https://github.com/lucasg/Dependencies 但是通过dependencies查看的时候,可能出现看上去一切都ok,但是应用一调用LoadLibrary就会返回失败,那么这个时候可以借用ProcessMonitorhttp://technet.microsoft.com/en-us/sysinternals/bb896645,将过滤规则设置成待观察的进程,查看该进程在对哪些文件进行访问,从文件的访问排查具体原因。可能会是,加载到了期望之外的别的path下面的同名的dll。 版权说明 作者:grassofsky出处:http://www.cnblogs.com/grass-and-moon本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出,原文链接如有问题,可邮件(grass-of-sky@163.com)咨询.
这几天项目中需要GPS计算汽车的速度和行驶距离,这里简单记录一下使用过程 1和平常使用地图一样,在Info.plist中添加位置请求 2在viewdidLoad中初始化locationManager _locationManager=[[CLLocationManageralloc]init]; _locationManager.delegate=self; _locationManager.desiredAccuracy=kCLLocationAccuracyBest; [_locationManagerrequestAlwaysAuthorization]; [_locationManagerstartUpdatingLocation]; [_locationManagerlocation]; 复制 3实现代理方法-(void)locationManager:(CLLocationManager*)managerdidUpdateLocations:(NSArray*)locations if(_startingLocation==nil){ _startingLoca
题干:判断一个整数是不是回文 解法1:整数转字符串,判对称 时间效率164ms,耗时在字符串转换应该是这样 boolisPalindrome(intx){ if(x<0) returnfalse; else{ intnum=x; charstr[1000]; sprintf(str,"%d",num); intsize=(int)strlen(str); boolisFlag=true; for(inti=0;i<size/2;i++){ if(str[i]!=str[size-1-i]){ isFlag=false; break; } } returnisFlag; } }复制 第二种,利用整数翻转,参考例题LeetCode7 reverse-integer 时间效率116ms(感觉到题目有循序渐进哦能把做过的题的方法用上) boolisPalindrome(intx){ if(x<0||(x%10==0&&x>0))//能被10整除大于0的数一定不对称边界 returnfalse; else{ ints
packagecom.puxinwangxiao.mts.util; importjavax.sound.sampled.AudioInputStream; importjavax.sound.sampled.AudioSystem; importjavax.sound.sampled.Clip; importjava.io.File; importjava.net.URL; publicclassAudioUtil{ /** *获取音频文件时长 * *@paramwavFilePathwav文件路径,支持本地和网络HTTP路径 *@return时长/微秒,可/1000000D得到秒 *@throwsException */ publicstaticlonggetMicrosecondLengthForWav(StringwavFilePath)throwsException{ if(wavFilePath==null||wavFilePath.length()==0){ return0; } Stringbath=wavFilePath.split(":")[0]; Clip