stm32

如何学习嵌入式?(网上汇总)

妖精的绣舞 提交于 2020-04-06 03:32:33
如何学习嵌入式?汇总了网上的一些帖子,最后部分给出了一些资源的下载链接 嵌入式菜鸟学习路线,2019, https://zhuanlan.zhihu.com/p/68227075 嵌入式小白到大神学习全攻略(学习路线+课程+学习书籍+练习项目) https://zhuanlan.zhihu.com/p/49950347 如何入门单片机/嵌入式 https://zhuanlan.zhihu.com/p/44771282 怎么自学嵌入式? https://www.zhihu.com/question/332475450 嵌入式技术学习路线 https://www.cnblogs.com/wxb20/p/5962148.html 如何学习嵌入式系统? https://www.zhihu.com/question/19688487 这个帖子有点老,不过一些推荐的经典书籍没有过时 评论中有一句话: 如果是学计算机的,那么学嵌入式不会有门槛。 如果不是学计算机的,那么忘了嵌入式,先学习计算机。 说得很在理! stm32学习视频(资料)推荐,2018, http://blog.sina.com.cn/s/blog_14f6592880102ya44.html 如何学习嵌入式软件?一位嵌入式学员的心得 https://zhuanlan.zhihu.com/p/70448337

STM32(2)——GPIO

♀尐吖头ヾ 提交于 2020-03-30 01:56:24
对于初学者而言,最简单的是对芯片上的IO进行操作,我们学习ARM时候,第一个工程就是点亮LED,STM32F103ZET6通用输入输出接口 (General-Purpose Inputs/Outputs),每个GPIO都可以由软件配置成输出(推免或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口。多数 GPIO引脚都与数字或模拟的复用外设共用。具体的细节请参考 Datasheet。 回到 MDK开发平台,现在要在 main.c中加入相关代码了。代码清单如下: #include "stm32f10x_lib.h" int main() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //开启外设时钟 GPIOD->CRL = 0x33333333; //设置端口配置寄存器 GPIOB->CRL = 0x33333333; while(1) { GPIOD->ODR = 0xffffffbf; //设置端口输出寄存器 for(i=0;i<1000000;i++); //延时 GPIOD->ODR = 0xffffffff7; for(i=0;i<1000000;i++); GPIOD->ODR = 0x00000000; GPIOB->ODR = 0xffffffff;

STM32学习之路-点亮LED

℡╲_俬逩灬. 提交于 2020-03-30 01:53:06
STM32学习笔记—点亮led灯 STM32的I/O口有很多的功能,所以称为GPIO(GENERAL PURPOSE) 其中GPIO又分为A,B,C,D,E,F,G不同的组,每个组端口又分为0~15,共16个不同的引脚,不同的芯片引脚数量也不同,所用的学习板为STM32F103RBT6; I/O口的八种模式: 输入浮空; 模拟输入; 输入上拉; 输入下拉; 开漏输出; 推挽输出; 推挽式复用功能; 开漏复用功能; 每个I/O口可以自由编程,单I/O口寄存器必须按32位字节被访问。并且很多I/O口都是5V兼容的,手册当中标记FT的就是5V电平兼容的。 I/O的七个 寄存器( register ) :(X=A,B,C,D….G) 32位端口配置低寄存器GPIOX_CRL; 选择作为输入还是输出 32位端口配置高寄存器GPIOX_CRH; 选择作为输入还是输出 32位端口输入数据寄存器GPIOX_IDR; 保存了输入电平还是输出电平 32位端口输出数据寄存器GPIOX_ODR; 保存了输入电平还是输出电平 32位端口位设置/清除寄存器GPIOX_BSRR; 设置控制的数据为0/1 32位端口位清除寄存器GPIOX_BRR; 设置控制的数据为0/1 32位端口配置锁定寄存器GPIOX_LCKR;设置锁定引脚后,不能修改其配置 32位端口配置低寄存器GPIOX_CRL(低8位): 一个I

STM32学习分享

荒凉一梦 提交于 2020-03-26 22:53:30
第1章打印头 1.1打印头参数 打印方式: 行式热敏 打印宽度: 48mm 打印纸宽度: 58mm 点密度: 384 点/行 打印速度: 40~80mm/s 打印头温度侦测: 热敏电阻 缺纸侦测: 红外反射光传感器 打印头加热器工作电压(DCV): 3.13~8.5, 典型值(7.4v) 逻辑工作电压(DCV): 2.7-5.25,典型值(5v) 步进电机工作电压(DCV) 3.5-8.5, 典型值(5v) 工作温度: +0℃-50℃(不许有凝露) 工作湿度: 20%-85%RH(不许有凝露) 胶辊开合次数: 大于 5000 次 工作寿命: 机构与打印头的耐磨>50km,打印头的电机寿命为 10^8 个脉冲 重量(克): 40.7 1.2打印头工作原理 将一行 384 个点对应的数据按顺序输入,控制加热信号 STB1、 STB2、 STB3、 STB4、 STB5、 STB6,加热打印头, 写入的数据中,对应二进制 bit 为 1 的点就会加热成黑点,对应二进制数据为 0 的 bit 则不会变色;与此同时, 输入步进电机激励相序信号,转动一步(加热和步进电机转动同时进行);紧接着输入第二行点的数据……,依次循环 24 次(24*24 字体),完成一整行字符、汉字打印。 其内部电路示意图如下所示: STB1-6是加热的信号管脚,LAT是锁存器,CLK是移位寄存器的时钟线

ERROR_DOWNLOAD_TASK_START_ISSUE on System Workbench STM32 Eclipse has not been resolved

醉酒当歌 提交于 2020-03-26 03:51:07
问题 I have the exact same problem as this question The problem is that when downloading the firmware for a STM model in System Workbench, the download fails with ERROR_DOWNLOAS_TASK_START_ISSUE The reason I post this question again is: 1)The answer given in that question only works for a particular STM model A mode general solution is needed 2) This question has been posted by many people having the same issue in the OpenSTM32 COmmunit forum. So far nobody has an answer, and apparently it is a

STM32 按键扫描的方式实现,用队列传递参数

◇◆丶佛笑我妖孽 提交于 2020-03-25 13:29:21
3 月,跳不动了?>>> 开发环境是keil4.70a 实验板为神舟三号 STM32F103ZET6 软件上使用到了固件库了ucosii 纯粹为了学习,分享一下学习心得 首先上队列初始化的代码 OS_EVENT* KEY_Q; //按键记录的OS队列 void *key_list[80]; //队列定义时要求定义指针数组 /* 推荐在main中或者main.c类似的文件和位置创建这两个变量 */ KEY_Q = OSQCreate(key_list,80); /* 推荐在OSInit之后立马创建这个队列 */ //对了别忘了配置 //这些OS的功能使能 #define OS_Q_EN 1 /* Enable (1) or Disable (0) code generation for QUEUES */ #define OS_Q_ACCEPT_EN 1 /* Include code for OSQAccept() */ #define OS_Q_DEL_EN 1 /* Include code for OSQDel() */ #define OS_Q_FLUSH_EN 1 /* Include code for OSQFlush() */ #define OS_Q_PEND_ABORT_EN 1 /* Include code for OSQPendAbort() */

STM32 printf 函数原型

孤人 提交于 2020-03-22 03:06:37
在STM32工程中调用printf函数,需要加入如下代码: #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ UT*/ void Printf_Init(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function,

基于STM32和W5500的Modbus TCP通讯

試著忘記壹切 提交于 2020-03-21 05:10:59
在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现。 1、移植千的准备工作 为了实现Modbus TCP通讯首先需要下载W5500的驱动源码,可以到WIZnet的官网下载: http://wizwiki.net/wiki/doku.php?id=products:w5500:driver 下载下来的压缩包,解压后如下图: 需要将ethernet文件夹拷贝到我们的项目目录中: 并在IAR的项目下添加相关的文件和路径,主要是socket.c、w5500.c、wizchip_.conf.c三个文件。这三个文件分别实现socket、硬件驱动及相关通讯配置功能,具体可以查看相应的源码级手册。 并在如下图所示的项目选项设置中添加Ethernet和Ethernet\W5500目录。 2、移植过程和代码编写 在完成以上工作后就可以开始真正地移植工作了。具体步骤如下: 硬件配置及初始化。 以太网通讯配置的初始化。 实现具体的通讯过程。 2.1、硬件的配置及初始化 由于W5500通过SPI接口与STM32通讯,所以硬件配置和初始化是非常简单的,与W5500实际上没有关系,使一些通用的操作。事实上就是STM32F103的SPI接口初始化的过程,需要实现RCC、GPIO以及SPI的初始化就可以了

STM32 Cubemx Printf重定向

一曲冷凌霜 提交于 2020-03-18 10:00:39
1.对于版本比较低的STM32CubeMX(比如V4.25.0),生成的工程缺少syscall.c文件。 将 syscall.c文件复制到 startup目录下,而新版本的STM32CubeMX(V5.6.0)会自动生成syscall.c文件,在Src文件夹下。 2.添加必须要的代码段: 1 /* Private function prototypes -----------------------------------------------*/ 2 void SystemClock_Config(void); 3 4 /* USER CODE BEGIN PFP */ 5 /* Private function prototypes -----------------------------------------------*/ 6 #ifdef __GNUC__ 7 #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) 8 #else 9 #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 10 #endif 11 /* USER CODE END PFP */ 12 13 /* USER CODE BEGIN 4 */ 14 /*retargets the C

STM32中断优先级

时间秒杀一切 提交于 2020-03-17 22:27:10
把STM32中断优先级搞懂了 现在与大家分享: 一:综述 STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级 的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。 二:优先级判断 STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 三:优先级分组 既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位在NVIC应用中断与复位控制寄丛器(AIRCR)的中断优先级分组域中,可以有8种分配方式,如下: