基于STM 的+PMSM+FOC软件库培训

STM32F407学习资料

使用心得: STM32F4与STM32F1在ADC方面的区别: 通常,在STM32F1中需要加自动校准的程序,如下: // 使能ADC1自动校准功能 ADC_ResetCalibration(ADC1); //检查ADC1自校准的状态位 while(ADC_GetResetCalibrationStatus(ADC1)); //启动ADC1自校准 ADC_StartCalibration(ADC1); //检查ADC1自校准是否结束 while(ADC_GetCalibrationStatus(ADC1)); // ADC自动校准结束--------------- 然而,STM32F4中无需此程序,给出STM32F407的ADC3和DMA方式的官方程序如下:/** ****************************************************************************** * @file ADC3_DMA/main.c * @author MCD Application Team * @version V1.0.0 * @date 19-September-2011 * @brief Main program body ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS A T PROVIDING CUSTOMERS * WITH CODING INFORMA TION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SA VE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY

STM32的学习速成

STM32入门系列教程如何提高STM32的学习效率 Revision0.01 (2010-04-08)

目录 第一章笔者的入门总结 (2) 1.1为什么要把时间花在“犹豫”上? (2) 1.2看资料需要计划、耐心和速度 (2) 1.3学STM32必备开发板 (3) 1.4熟悉开发板并试图写程序 (3) 第二章STM32入门方法谈 (4) 2.1拿到开发板我该做什么? (4) 2.2我的时间如何安排 (5) 2.3碰到问题怎么办? (5) 第三章STM32学习步骤 (6) 3.1关于STM32文档学习 (6) 3.230天上手STM32计划 (7) 3.2.1第1步:熟悉调试软件 (8) 3.2.2第2步:GPIO编程 (8) 3.2.3开始全新的STM32深入研究 (9) 福州芯达工作室简介 (9)

第一章笔者的入门总结 1.1为什么要把时间花在 犹豫””上? 为什么要把时间花在““犹豫 每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。 大家一般都是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。严格地说,应该是模仿实验。熟悉之后才会自己写程序代码实现某个功能。因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM32;那么,从现在开始,不要犹豫了,不要想再详细地了解STM32的前景了。做一个可能影响你一生的决定吧!不用咨询,不用兴奋,开始看书籍(文档)吧!!每个人都是这么走过来的。 1.2看资料需要计划、耐心和速度 这里所谓的“资料”包括STM32书籍、文档。因为STM32有个特点,datasheet 很多都是中文的,有些同学就没有去买书籍,直接看STM32的用户手册,也是可以的。但是不管看书籍还是文档,我们是需要计划的。不是今天看3页,明天看5页。一本书看了两个月,还在磨蹭。请记住,你学的不是寂寞,是STM32!看书或文档不是用来消遣时间的。背水一战吧,给自己规定一个底线:两周内把一定粗略地过一遍!不要求都看懂,事实上,不可能都看懂。但我们必须理解基本知识,对难度高的知识有一个印象,至少以后碰到问题的时候,我们会似曾相识,感觉在哪里见到过,于是翻资料上网找答案——带着问题的时候,效率才是超高的。 两周过去了,STM32的知识你过一遍了吗?没看完?那么,你应该考虑这些天中,你是否尽力了?是否真的想学STM32?或者还是看到STM32人气很高,也想跟下时髦?是不是碰到问题没法解决就想放弃了?现在是你做第二个决定的时候了,请决定你是否继续攻读STM32。如果是一时冲动想跟时髦,请马上放弃——你已经浪费两周时间了,你还想再浪费14天吗?如果想吃得苦中苦,方为人上人,OK,请继续往下看:) 1.3学STM32必备开发板 稍微了解一些理论知识后,现在摆在你面前,有两条路: 第一,自己画PCB制板、焊接、调试。 第二,购买一套性价比高的开发板。 笔者之前做过几次PCB设计,而且当时在实验室可以报销所有费用,就自

STM32入门基本知识

STM32学前班教程之一:选择他的理由 经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。其中涉及产品一律隐去来源和品牌,以防广告之嫌。全部汉字内容为个人笔记。所有相关参考资料也全部列出。:lol 教程会分几篇,因为太长啦。今天先来说说为什么是它——我选择STM32的原因。 我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。 不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和的电源让人很头疼。 后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的AVR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MIPS值计算)。正好2148我还没上手,就直接转了这款STM32F103。 与2811相比较(核心供电情况下),135MHz×1MIPS。现在用STM32F103,72MHz×,性能是DSP的66%,STM32F103R型(64管脚)芯片面积只有2811的51%,STM32F103C型(48管脚)面积是2811的25%,最大功耗是DSP的20%,单片价格是DSP的30%。且有更多的串口,CAP和PWM,这是有用的。高端型号有SDIO,理论上比SPI速度快。 由以上比较,准备将未来的拥有操作系统的高端应用交给DSP的新型浮点型单片机28335,而将所有紧凑型小型、微型应用交给STM32。 STM32学前班教程:怎么开发 sw笨笨的STM32学前班教程之二:怎么开发目前手头的入门阶段使用的开发器概述 该产品为简易STM32调试器和DEMO板一体化的调试学习设备,价格在一百多块。 2、硬件配置

STM32入门C语言详解精编版

阅读flash:芯片内部存储器flash操作函数我的理解——对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。 所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2); 位置:RCC初始化子函数里面,时钟起振之后。 基础应用2,开启FLASH预读缓冲功能,加速FLASH的读取。 所有程序中必须的 用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 位置:RCC初始化子函数里面,时钟起振之后。 3、阅读lib:调试所有外设初始化的函数。 我的理解——不理解,也不需要理解。只要知道所有外设在调试的时候,EWRAM需要从这个函数里面获得调试所需信息的地址或者指针之类的信息。 基础应用1,只有一个函数debug。所有程序中必须的。 用法:#ifdef DEBUG debug(); #endif 位置:main函数开头,声明变量之后。 4、阅读nvic:系统中断管理。 我的理解——管理系统内部的中断,负责打开和关闭中断。 基础应用1,中断的初始化函数,包括设置中断向量表位置,和开启所需的中断两部分。 所有程序中必须的。 用法:void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; //中断管理恢复默认参数 #ifdef VECT_TAB_RAM //如果C/C++ Compiler\Preprocessor\Defined symbols中的定义了 VECT_TAB_RAM(见程序库更改内容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //则在RAM调试 #else //如果没有定义VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);//则在Flash里调试 #endif //结束判断语句 //以下为中断的开启过程,不是所有程序必须的。 //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC优先级分组,方式。 //注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定, NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。 //NVIC_InitStructure.NVIC_IRQChannel = 中断通道名; //开中断,中断名称见函数库 //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级

STM32自学笔记

一、原子位操作: 原子位操作定义在文件中。令人感到奇怪的是位操作函数是对普通的内存地址进行操作的。原子位操作在多数情况下是对一个字长的内存访问,因而位号该位于0-31之间(在64位机器上是0-63之间),但是对位号的范围没有限制。 原子操作中的位操作部分函数如下: void set_bit(int nr, void *addr)原子设置addr所指的第nr位 void clear_bit(int nr, void *addr)原子的清空所指对象的第nr位 void change_bit(nr, void *addr)原子的翻转addr所指的第nr位int test_bit(nr, void *addr)原子的返回addr位所指对象nr位int test_and_set_bit(nr, void *addr)原子设置addr所指对象的第nr位,并返回原先的值 int test_and_clear_bit(nr, void *addr)原子清空addr所指对象的第nr位,并返回原先的值 int test_and_change_bit(nr, void *addr)原子翻转addr所指对象的第nr位,并返回原先的值 unsigned long word = 0; set_bit(0, &word); /*第0位被设置*/ set_bit(1, &word); /*第1位被设置*/ clear_bit(1, &word); /*第1位被清空*/ change_bit(0, &word); /*翻转第0位*/ 二、STM32的GPIO锁定: 三、中断挂起: 因为某种原因,中断不能马上执行,所以“挂起”等待。比如有高、低级别的中断同时发生,就挂起低级别中断,等高级别中断程序执行完,在执行低级别中断。四、固文件: 固件(Firmware)就是写入EROM(可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。 五、固件库:包含各个外设或者内核的驱动头文件和C文件。 六、TIx的输入捕获滤波器(消抖): 采样频率fSAMPLING,采样次数N,如果以采样频率对一脉冲进行采样时,如果在N个采样方波里该脉宽不变,则视为一次有效的脉冲,否则视为无效的脉冲。 七、高级定时器的PWM互补输出: 常用于X相电机驱动,其中的互补输出则防止电机的死区出现。

稀里糊涂学习STM32全本

J^dt ? ? ? ?? ???? ? ????? ? q?670 ? ?8 ?Yū ?Yū ? ū a ?q? 1 /? ? ? % - ? $ L ? ) 670 &RUWH[ 0 #&RUWH[ 0 ? $50Y 0 8 ? )??? ?) b?0 ) #0 0 ? $50? 0 # 0 ?? $50 2 (? #) 8? ?? 3 δ . (?)?- ? δ 8?b q? ? - /? ??? ? ? ? ?-? -? ? -?670 ?? " $ ? -? / ) ? -?670 q ? ǎ ? ? 670 0) Ρ? ? ???p ? - ? ?? ?- # ? ) ?μ-670 )-1 ? -? - ? ? ?+ ??? ? ?? ?) ??(? C ? - ?

J^dt %- (0? ) ? (??/ ?W ? μ - d /??q670 e $% $% " - ? ?p ?" ? ?? 8 '0$ ? c? q? G>1" 3 ? $+% ?- ??? ? ? ? ? $+%"? ? $3% $3% ?P ?? ? ?? ? ! 8? $ $3% ?ǎ2-? #$3% ?ǎ?-? .1" (-? v 670 " ? 8 ?)? ?v b? 50 670 ) [[[?#μ?? 9

J^dt ? ) 670 ? ?? " ?? . 5HJ K # - 0$7 ; K - ? ? 670 ? ? %3 ? ? ? d K e d670 ) [B6WG3HULSKB/LEB9 e? LQF ?-/ / ?? 0) 670 ? ?< ? - ?) - % ? +- ?) ?> ? / -? ?? ??? ??670 t " ?J ? )- >- .? )8 t)?? ? ? - ? ? */ - -? -% + ) ? ?? % - ? ? 2 ??9 ?a- ǎ ǎ? a

STM32经典学习资料——SPI

SPI总线 与IIC类似,SPI也是一种通信协议。今天我们就以WX25X16芯片为例来介绍SPI.首先我们来看下硬件连接。 、从原理图可以看到该芯片需要单片机控制的管脚有4个,非别是CS,DO,DIO,CLK.其中CS 是片选信号,只有将该位拉低才能选中该芯片。DO,DIO分别是输出和输入。CLK是时钟信号。SPI通信的步骤如下所示: 1)获取地址1 2)获取地址2 3)擦除扇区 4)写入数据 好的,下面我们对每个步骤进行分析 (1)在对芯片操作前先要对端口及SPI外设进行相应的设置: /* 函数名:SPI_FLASH_Init(void) 功能:对端口和SPI初始化 输入:无 输出:无 调用:被主函数调用 */ void SPI_FLASH_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Enable SPI1 and GPIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD, ENABLE); /*!< SPI_FLASH_SPI Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /*将PA5(CLK)配置成复用推挽输出*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /*将PA6(DO)设置成浮空输入*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOA, &GPIO_InitStructure); /将PA7(DIO)设为浮空输入/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); /将PA4(CS)设为推挽输出/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /拉高CS,失能芯片,该语句是宏定义,就是置高PA4/ SPI_FLASH_CS_HIGH(); /* SPI配置/ // W25X16: data input on the DIO pin is sampled on the rising edge of the CLK. // Data on the DO and DIO pins are clocked out on the falling edge of CLK. /*将SPI设为全双工模式*/ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /*将SPI设为主模式*/ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /*将SPI通信的数据大小设为8位*/ SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /*将CLK的高电平设为空闲*/ SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; /*设置在第二个时钟沿捕获数据*/ SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; /*指定NSS信号由软件管理*/ SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; /SPI_BaudRatePrescaler用来定义波特率预分频的值,这个值用以设置发送和接收的SCK时钟/ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; /SPI_FirstBit指定了数据传输从高位还是低位开始/ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /SPI_CRCPolynomial定义了用于CRC值计算的多项式/ SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); } (2)获取器件地址1

基于STM32的图像显示系统..

摘要 本文介绍了基于STM32的图片显示系统设计。现如今LCD显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。基于STM32的LCD显示可以更好的满足各种需求,也更便于操作和实现。通电后,复位到初始化状态可显示本次课程设计题目及成员等基本信息,可人为操作对显示信息的汉字进行自定义大小颜色及字体等等;把要显示的图片考入内存卡里,更新内存卡,即图片可进行变换;自定义定时跳转下一幅图片,也可以通过按键快速跳到下一幅图片,或返回上一张图片。利用TFT-LCD液晶显示屏显示的图片清晰、分辨率高,显示图片的效果极好。 关键词: STM32; LCD显示屏; 图片显示

目录 1 引言 .................................................................................................... 错误!未定义书签。 2 总体设计 ............................................................................................ 错误!未定义书签。 2.1 图片显示的基本原理 (2) 2.2 图片显示设计分析 (2) 2.3 系统的结构框图 (3) 3 详细设计 ............................................................................................ 错误!未定义书签。 3.1 硬件设计 .................................................................................... 错误!未定义书签。 3.1.1 ALIENTEK MiniSTM32开发板简介 .................................. 错误!未定义书签。 3.1.2 功能简介 .......................................................................... 错误!未定义书签。 3.2 软件设计 (7) 3.2.1 主函数部分 (8) 3.2.2 硬件部分程序 (9) 3.2.3 识别图片 (11) 3.2.4 FAT系统 (14) 3.2.5 程序流程图 (15) 4 实验结果及分析 (16) 4.1 硬件实验结果 (16) 4.2 结果分析 .................................................................................. 错误!未定义书签。 5 结论 (17) 参考文献 (18)

STM32实现万年历..

STM32学习笔记一竹天笑 实现的功能: 1、日历功能。 2、数字和模拟时钟功能。 图1(为LCD截屏保存在SD卡中的图像) 最终界面如下,但还存在不少漏洞。1、没有更改时间的设置;2、只有节气显示没有节假日显示3、背景不是用uCGUI画的,是在PS中画好然后存在SD卡中,然后显示的BMP 格式图像。 要点分析: 1、STM32自带了RTC时钟计数器,从0开始计数到232。每一个计数代表秒计数,每六十个计数代表分计数,以此类推。24(小时)*60(分钟)*60(秒钟)=86400代表一天的计数时间。假设当前计数为count,count/86400得到计数的天数,根据这个得到年月日。Count%86400得到时分秒。 2、一些根据1中得到的年月日时分秒,进行计算的程序有:阳历转阴历,闰年判断,节气判断,星期几计算,当前月有多少天等等。 3、模拟时钟的绘制:时钟指针运动算法、屏幕重绘方法、RTC消息、画笔/画刷等。指针运动算法和屏幕重绘方法是本程序主要难点所在。(以下参照百度文库之模拟时钟)不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针端点(x, y)的公式如下: x =圆心x坐标+ 指针长度* cos (指针方向角) y =圆心y坐标+ 指针长度* sin (指针方向角) 注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。 由于屏幕的重绘1秒钟一次,如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。本程序采用非删除式重绘,假定指针将要移动一格,则先采用背景色(这里是白色)重绘原来指针以删除原来位置的指针,再采用指针的颜色在当前位置绘制指针(如果指针没有动,则直接绘制指针,此句在程序中被我删除,具体原因,为数据截断导致一些误差)。 另外,秒表为RTC一秒钟定时计数。 程序分析:

STM32学习心得(新手必看)

STM32学习心得(新手必看) (作者:logokfu 邮箱:g535343589@https://www.360docs.net/doc/0e16200955.html, ) 在这里说下我的学习心得体会(照顾下新手,老鸟都表笑哦,呵呵)。 说下关于开发环境的建立,都说万事开头难,每种芯片都有它的开发环 境,首先得熟悉STM32的开发环境。用的最多就是MDK 和IAR 了,关于MDK ,这个用过51单片机的筒子肯定都知道keil uvision 。这个MDK 其实就是专门开发ARM 芯片的工具。开发51单片机的那个叫C51 。这个C51和MDK 共同使用keil uvsion 这个UI 界面。也是说C51和MDK 共同使用keil uvsion 这个外壳。好了,关于开发软件的介绍就介绍这么多,有什么还不清楚的,筒子们可以邮箱联系我。当然支持STM32的集成开发环境(IDE )还不止MDK 和IAR ,只不过这两个使用的人相对其他工具来说用的人比较多吧。另外 RIDE, HiTOP , TrueSTUDIO 这个三个开发工具也支持STM32的开发(可能还有其他的工具,不过我不知道)。有兴趣的盆友可以使用下尝尝鲜。 说下关于ST 官方为我们提供的固件库的使用问题。不要觉得固件库是 这个什么可怕的东西,固件库是ST 为用户提供的函数库,这些函数帮 我们一次性解决多个寄存器的设置问题。如果没有固件库的话,那么我们就需要像使用51单片机那样直接设置要使用的寄存器,在51单片机上为寄存器直接赋值可能没什么的,但是由于STM32的寄存器太多,如果一个个设置的话会很麻烦,有时候还会忘掉某些寄存器的设置,ST 提供的固件库正是为我们提供了这些方便。我们只需要为相关函数指定参数就可以完成寄存器的设置了。为产品的快速开发提供了保障。当然新固件库是好,但是却会对新手理解硬件结构造成一定的影响。有的人喜欢直接为STM32的寄存器直接赋值,说这样子比较直观,有的人喜欢使用固件库。当然这个是个人喜好,大家可以根据自己的喜好进行选择。我的建议是可以直接用固件库,虽然我对硬件结构还没了解很多,用固件库的话可能会觉得有点学习的不是很踏实,因此我们可以借助开发工具的go to definition 功能,顺藤摸瓜。在最终的函数中,我们就能发现这些函数到底为哪些寄存器设置了什么值。这样看多了,时间久了各个寄存器也就了解的差不多了。当然进行下随着产品的不断推出,固件库版本可能会不断的更新。之前的固件库版 首先 其次

STM32学习笔记(初学者快速入门

STM32学习笔记(初学者快速入门 STM32 学习笔记 从51 开始单片机玩了很长时间了有51PICAVR 等等早就想跟潮 流玩玩ARM 但一直没有开始原因-----不知道玩了ARM 可以做什么对我自 己而言如果为学习而学习肯定学不好然后cortex-m3 出来了据说这 东西可以替代单片机于是马上开始关注也在第一时间开始学习可惜一开始 就有点站错了队选错了型仍是对我自己而言我希望这种芯片应该是满大 街都是随便哪里都可以买得到但我选的第一种显然做不到为此大概浪费

了一年多时间吧现在回到对我来说是正确的道路上来啦边学边写点东西 这里写的是我的学习的过程显然很多时候会是不全面的不系统的感 悟式的甚至有时会是错误的有些做法会是不专业的那么为什么我还要写 呢这是一个有趣的问题它甚至涉及到博客为什么要存在的问题显然博客 里面的写的东西其正确性权威性大多没法和书比可为什么博客会存在呢 理由很多我非专家只说我的感慨 我们读武侠小说总会有一些创出独门功夫的宗师功夫极高然后他的弟 子则基本上无法超越他我在想这位宗师在创造他自己的独门功

夫时必然会 有很多的次的曲折弯路甚至失败会浪费他的很多时间而他教给弟子时 则已去掉了这些曲折和弯路当然更不会把失败教给弟子按理说效率应该更 高可是没用弟子大都不如师为什么呢也许知识本身并不是最重要的获 取知识的过程才是最重要的也许所谓的知识并不仅仅是一条条的结论而是 附带着很多说不清道不明的东西如植物的根一条主根上必带有大量的小小的 触须 闲话多了些就权当前言了下面准备开始 一条件的准备

我的习惯第一步是先搭建一个学习的平台原来学51PICAVR 时都 是想方设法自己做些工具实验板之类现在人懒了直接购买成品了 硬件电路板火牛板 软件有keil 和iar 可供选择网上的口水仗不少我选keil理由很简单 这个我熟目前要学的知识中软硬件我都不熟所以找一个我有点熟的东西 就很重要在我相当熟练之前肯定不会用到IAR如果真的有一天不得不用I AR 相信学起来也很容易因为这个时候硬件部分我肯定很熟了再加上有ke il 的基础所以应该很容易学会了

stm32_can波特率设置指南培训资料

s t m32_c a n波特率设 置指南

STM32的CAN波特率计算 STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用. bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟: APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的, 然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图: 有了上边的这个图,基本就清楚了. 总线时钟MHz (3+TS1+TS2)*(BRP+1) =================================================== 下面是我的计算: CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; 注意//#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */ CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; CAN_InitStructure.CAN_Prescaler = 4;//2 nominal bit time(3+5+1)tq=9tq 关于分频系数查看 system_stm32f10x.c下面的 static void SetSysClockTo72(void) 函数 /* HCLK = SYSCLK */ /* PCLK2 = HCLK */ /* PCLK1 = HCLK/2 */ 所以can时钟 72MHZ/2/4=9 Mhz tq=1/36Mhz 波特率为 1/nominal bit time= 9/9=1MHZ ========================================= ----------------------------------------------- ==================================================== void CAN_Configuration(void) { CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; /* CAN register init */ CAN_DeInit(); CAN_StructInit(&CAN_InitStructure); /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE;

stm32学习经历

随便写写,关于stm32 最近在学习stm32,写点东西,虽然简单,但都是原创啊 开发板是前辈画的,好像是用来测试一个3G功能的,不过对于我来说太远;我要来了3个,自己焊了一个最小系统,好在公司资源还是不错的,器件芯片有,还可以问问前辈--对公司还是比较满意的,虽然工资少了点,但学东西第一位O(∩_∩)O~。 最开始当然是建工程了,这个真不太会,前前后后竟用了一周(时间真长,别见笑啊),上网查资料,问前辈,自己琢磨。。。总算搞定,然后从GPIO开始学,开始还真没什么头绪(虽然在大学学点51,但完全没有真正应用,顶多是跑马灯实验),开始纠结是从寄存器开始学还是从库函数开始学,后来看到一句“用库函数入门,用寄存器提高”于是下定决心用库,但当时没有库的概念,结果走了很多弯路,看了很多不必要的东西,当时竟没理解到只是调用库就OK了,别的不用管。最后潜心的在https://www.360docs.net/doc/0e16200955.html,教程网看完一个例程后照猫画虎写了一个,经过了多次调试以后,灯终于亮了!那个兴奋啊。再次还要感谢 https://www.360docs.net/doc/0e16200955.html,/mcu/1106.html 的作者他写的GPIO使用方法让我少走了很多弯路,接着学的EXTI,当时对中断的理解只是概念上的,也不知道中断程序要放在中断函数里(it.c),总之现在想想当时怎么那么不开窍啊。慢慢的中断也弄出来了,一会我会把程序贴出来,很简单的嘿。慢慢的有点感觉找到门了:先大致看一下要学习概要,找个例程,一个函数一个函数的看,重点理解配置的什么,参数,然后在头脑中形成一个大概的轮廓,虽然有时候不是特别清晰;接着学习TIMER(通用定时器),只是学习了最简单的溢出中断,其他捕获什么的都还没有看呢--想先对stm有个总体的学习,下一步准备每个模块细细“研读”。应用定时器溢出中断做了个闪灯小程序;接着顺便把学习过的GPIO,EXTI,TIMER混在一起做了一个优先级(NVIC)的程序,以来了解下优先级,二来对前面的学习是一个复习,虽然很简单,但没能一下子就调出来--其实每次都会在细节上出不少差错:时钟忘使能啦,GPIO没有配置全啦,名称写错啦(很低级,但这个有时候真的不好找),概念理解不对啦。。。。。。有时候憋的真是相当难受,但问题解决的那一刻真怎是一个“爽”字了得啊,当然前提是自己解决的;接下来学USART(串口),原来我也不知道有串口这么个东西,但弄单片机的要是不知道“串口”就好比开车的不知道轮胎一样了,开始完全没有概念,什么波特率啊,奇偶校验位啊,停止位啊,对着一堆名词看着都头大。慢慢的了解到串口是一种通讯传输方式,就和USB一样,只是串口比USB早出生好多年。这时候已经有点门了,看概念,抄例程,看函数,理解,根据自己的理解改参数,实现!学会了串口,以后就可以通过串口来观察数据了(我的实验板可是没有屏的);下一个是DMA,DMA可是个好东西,至于怎么好,百度一下,大家就知道了;下来ADC(模数转换),就是把模拟量转化成数字量,据说stm

STM32学习笔记(关于时钟)

STM32学习----时钟(转载) 在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 HSE/LSE时钟源 ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL[1:0]来选择。 STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz 的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。 另外,STM32还可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。 系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。系统时钟可选择为PLL输出、HSI或者HSE。系统时钟最大频率为72MHz,它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用: ①、送给AHB总线、内核、内存和DMA使用的HCLK时钟。 ②、通过8分频后送给Cortex的系统定时器时钟。 ③、直接送给Cortex的空闲运行时钟FCLK。 ④、送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。

DL-STM32自学成才系列教程之十四《点亮LCD液晶屏》

STM32入门系列教程点亮LCD液晶屏 Revision0.01 (2011-09-28)

原想把本期《点亮LCD液晶屏》教程放在《GPIO编程》之后,以提高大家的兴趣,但考虑到可能网友学习STM32,是想更多地了解STM32内部工作机制,因此在之前的教程,我们先介绍了串口、外部中断、定时器等最基本的外设模块,有了这些基础,相信您再来学习LCD液晶,已经很轻松了。 我们使用的是芯达STM32配套的2.4寸TFT液晶触摸屏,它是山寨手机上的触摸液晶屏,内部驱动IC为ILI9325。我们操作LCD,实际上就是在操作ILI9325。有关该芯片的资料,请参考如下两个网址: ILI9325指令说明(中文):https://www.360docs.net/doc/0e16200955.html,/read.php?tid=142 考虑到“触摸”涉及到太多的原理,因此把触摸屏单独列出一期教程详细讲解。这里只讲述如何去点亮LCD液晶屏,如果您看完本期教程,能理解LCD驱动过程,那么笔者心满意足。 要驱动LCD,分两个部分讲解: 1、CPU内部模块支持的LCD接口(这里使用FSMC模块) 2、LCD控制电路 一、STM32的FSMC原理 如果是单片机,相信大家再熟悉不过了,直接拿P0或者P1口用作LCD数据总线,再另外拿出几个IO口用作控制信号线——一个LCD控制电路完成了。STM32相对于单片机,有啥过人之处呢? 对于STM32系列的CPU来说,有两种方法给LCD总线赋值。第一个方法,就是给对应的GPIOx_ODR寄存器赋值——这与单片机一样,单片机也是给P0-P3寄存器赋值,使得信号能从对应的IO端口输出。而STM32的另一种方法就是使用FSMC。FSMC全称“静态存储器控制器”。使用FSMC控制器后,我们可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线。 1、FSMC包括哪几个部分? FSMC包含以下四个模块: (1)AHB接口(包含FSMC配置寄存器) (2)NOR闪存和PSRAM控制器 (3)NAND闪存和PC卡控制器

STM32自学笔记之教程一:如何建立一个工程

STM32自学笔记 之教程一:如何建立一个工程 1概述: 刚入手STM32,比较糊涂,感觉和51系列不同。 电脑安装keil mdk 4.23,借鉴前辈经验,开始新的旅程。 2建立目录 2.1 新建工程目录:“RS422”,你也可以根据自己的需要命名此顶层目录; 2.2在目录“RS422”下新建“RVMDK”目录,表示采用ARM MDK开发环境; 2.3在“RVMDK”目录下新建目录“V1”,表示软件版本V1.0,这个好处在于下次将整个目录复制一下改为“V2”,软件版本就是V2.0了。 2.4在“V1”目录下新建“Libraries”、“Project”、“USER”目录; 2.5在“Libraries”目录下新建“STM32F10X_StdPeriph_Driver”一个目录; 2.6在“Project”目录下新建“OBJ”、“LIST”、“Pro”3个目录。 2.7在“USER”目录下新建“INC”、“SRC”2个目录。 图1:目录结构图

3 拷贝文件 3.1 将固件库目录“C:\Keil\ARM\RV31\LIB\ST\STM32F10x”下除“stm32f10x_it.h”的所有库函数拷贝到工程目录“RS422”→“RVMDK”→“V1”→“Libraries”目录下。 3.2 将固件库目录“C:\Keil\ARM\Startup\ST\STM32F10x”目录下的所有件拷贝到工程目录“RS422”→“RVMDK”→“V1”→“Libraries”→“STM32F10X_StdPeriph_Driver”目录下。 3.3将固件库目录“C:\Keil\ARM\RV31\LIB\ST\STM32F10x”目录下的“stm32f10x_it.c”拷贝到工程目录“RS422”→“RVMDK”→“V1”→“USER”→“SRC”目录下,在此“SRC”目录下新建“main.c”文件,“main.c”先“神马”也不写。 3.4 将固件库目录“C:\Keil\ARM\INC\ST\STM32F10x”目录下的“stm32f10x_conf.h”文件拷贝到工程目录“RS422”→“RVMDK”→“V1”→“USER”→“INC”目录下。 4 建立工程 4.1运行“Keil uVision4”; 4.2点击主菜单栏“Project”→“New uVision Project”,选择在工程目录的“V1”→“Project”→“Pro”目录下命名新建工程为“RS422_MODULE.uvproj”(当然也可以命名为你自己需要的工程名); 4.3接下来出现CPU选择窗口,选择CPU为“STMicroelectronics”→“STM32F103RC”(这个大家根据自己的需要选择),点击“OK”按钮;4.4接下来出现“Copy STM32 Startup Code to Project Folder and ADD File to Project ?”提示时选择“否”(在后面的步骤中会根据CPU选择启动文件的,这里不用选择),完成工程建立。 5 工程管理 上一节新建的工程还是空空的,这一步要将它实例化。 5.1 在“Project”窗口中选择的“Manage Components”子菜单(见图2),出现“Components,Environment and Books”窗口(见图3)。

相关主题
相关文档
最新文档