stm32
w282529350
这个作者很懒,什么都没留下…
展开
-
STM32的NVIC理解
STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下#define NVIC_PriorityGroup_0 ((uint32_t)0x700转载 2012-03-23 16:15:22 · 814 阅读 · 0 评论 -
STM32 Usart 上电发送一个无效字符的问题
无论这么设置USart,上电后都会发送一个无效字符,这个是STATUS寄存器的上电初始值有问题造成的,Usart的发送数据寄存器有一个缓冲移位寄存器。并且发送有两个状态,一个是发送数据寄存器为空,一个是移位寄存器发送完成。上电后Usart的状态寄存器的发送完成位为0,造成了上电以后会始终会有一个值被发送,这个值就是发送移位寄存器中的值,而这个值有时候是0X00有时候是0XFE 。要解决转载 2012-06-09 15:58:52 · 3300 阅读 · 1 评论 -
STM32-串口超时判断方式接收未知长度数据
usart.c串口中断处理函数:u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节. u8 res=0; u8 i=0,Rec_Len; //Rec_Len为接收到的字符个数 u8 Rec_Over_Flag=0; u8 RxTimeout=3; //串口接收超时; void USART1_IRQHa转载 2013-05-26 12:12:46 · 11941 阅读 · 2 评论 -
STM32串口在首次发送字符的时候,首字符丢失解决办法
关于STM32如何串口输出字符串的代码,网上有很多种示例。这里就不多说。网上关于发送字符的代码大多如下:USART_SendData(USART1, (uint8_t)ch);while( USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);其实咋一看是说的通的,但是在仔细看手册的时候发现 TC 和 TXE转载 2013-06-04 19:48:56 · 11719 阅读 · 0 评论 -
stm32 fsmc 功能讲解
LCD有如下控制线:CS:Chip Select 片选,低电平有效RS:Register Select 寄存器选择WR:Write 写信号,低电平有效RD:Read 读信号,低电平有效RESET:重启信号,低电平有效DB0-DB15:数据线假如这些线,全部用普通IO口控制。根据LCD控制芯片手册(大部分控制芯片时序差不多):如果情况如下:DB0-DB15的IO全转载 2012-05-02 22:24:54 · 8066 阅读 · 3 评论 -
TIM通用定时器:PWM输入捕获模式
一、概念理解PWM输入捕获模式是输入捕获模式的特例,自己理解如下1. 每个定时器有四个输入捕获通道IC1、IC2、IC3、IC4。且IC1 IC2一组,IC3 IC4一组。并且可是设置管脚和寄存器的对应关系。2. 同一个TIx输入映射了两个ICx信号。3. 这两个ICx信号分别在相反的极性边沿有效。4. 两个边沿信号中的一个被选为触发信号,并且从模式控制器被转载 2013-08-05 13:46:28 · 2320 阅读 · 0 评论 -
STM32时钟初始化函数SystemInit()详解
花了一天的时间,总算是了解了SystemInit()函数实现了哪些功能,初学STM32,,现记录如下(有理解错误的地方还请大侠指出):使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz函数调用顺序:startup_stm32f10x_cl.s(启动文件) → SystemInit()转载 2013-08-05 13:57:48 · 10584 阅读 · 0 评论 -
STM32 IAP
KEIL也需要配置如下:关于Stack Size今天调试一个程序时,竟然一个局部变量莫名奇妙的乱变,最终因为Stack Size太小所致。原来400,改成800问题马上解决。-------------------------------------------------------------------------------------------转载 2013-12-09 14:21:58 · 1244 阅读 · 0 评论 -
STM32详解一
STM32详解1一、在进入主题之前我们先了解一些必要的基础知识----stm32系列芯片的种类和型号:startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xxstartup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xxstartup_stm32f10x_hd_vl.s转载 2013-12-09 14:31:06 · 11314 阅读 · 0 评论 -
.hex 文件详解 stm32
原作者地址http://blog.csdn.net/yx_l128125/article/details/13624947 感谢!我们先来详细分析“方法一”的操作:1.我们设置编译 程序的编译器(如图),这个设置意思是把程序下载到flash 的 0x0800 0000开头的位置,然后编译程序2.编译完程序后,在工程目录的output文件夹中找到编译后转载 2013-12-13 16:27:50 · 2598 阅读 · 0 评论 -
AT24C02驱动程序
#define SDA_OUT_MODE GPIO_PinInit(GPIO_PTE0, GPIO_PinOutput)#define SDA_IN_MODE GPIO_PinInit(GPIO_PTE0, GPIO_PinInput);#define SCL_LOW GPIO_PinClear(GPIO_PTE1)#define SCL_HIGH GPIO_PinSet(原创 2017-07-22 14:36:22 · 1504 阅读 · 0 评论 -
一步步写STM32 OS【三】PendSV与堆栈操作
感谢这位博主的图文并茂,解决了我很多疑问。一、什么是PendSVPendSV是可悬起异常,如果我们把它配置最低优先级,那么如果同时有多个异常被触发,它会在其他异常执行完毕后再执行,而且任何异常都可以中断它。更详细的内容在《Cortex-M3 权威指南》里有介绍,下面我摘抄了一段。OS 可以利用它“缓期执行”一个异常——直到其它重要的任务完成后才执行动 作。悬起 Pend转载 2017-08-18 17:35:18 · 1363 阅读 · 0 评论 -
一种基于查表的定时开关机判断方法
引言 定时开关机是在每天、每周、每月等的定时开关机中常见的问题。例如居民生活区的加压泵房,在用水量较少时(如深夜至凌晨),定时关闭加压系统,仅由管网供水;在用水量较大时,定时开启加压系统,进行恒压供水。为了实现定时开关机,系统需要外接一个实时时钟芯片(如DSl302),以获得实时时间。 一定周期(如每天)的定时开关机,需要解决实时时间中的进位问题。以时分为例,转载 2017-03-23 09:16:56 · 517 阅读 · 0 评论 -
FSMC调试进入HardFault_Handler问题的解决办法
最近调试FSMC的过程中,发现程序在执行完*(volatile unsigned short int *)0x6C000002 = LCD_RegValue;这一句之后就进入HardFault_Handler错误中断于是跟原来调好的程序对比,发现原来程序里Gpio_Init();Fsmc_Init();先配置IO口,后配置FSMC,而现在的程序则是先配置FSMC,后配置IO口的,于是换过来试试原创 2012-05-10 11:06:48 · 4024 阅读 · 0 评论 -
STM32 printf问题
在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法:一、对工程属性进行配置,详细步骤如下1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。2、在main文件转载 2012-05-09 13:36:42 · 1491 阅读 · 1 评论 -
解析STM32启动过程
相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC = 0x000000)同时中断向量表的位置并不是固定的。而Cortex-M3内核则正好相反,有3种情况:1转载 2012-05-10 10:17:19 · 1381 阅读 · 0 评论 -
STM32 DMA学习
一个简单的例子 transfer a word data buffer from FLASH memory to embedded SRAM memory.在V3.1.2库的位置STM32F10x_StdPeriph_Lib_V3.1.2\Project\STM32F10x_StdPeriph_Examples\DMA\FLASH_RAM/* DMA1 channel6 co转载 2012-03-27 20:57:55 · 1256 阅读 · 0 评论 -
什么是ROM、RAM、DRAM、SRAM和FLASH的区别
文章转自网络: ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存转载 2012-03-28 08:48:55 · 729 阅读 · 0 评论 -
MDK 编译文件大小说明(Program Size)
ARM编译中的RO、RW和ZI DATA区段2008-12-17 14:58ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成一个ARM程序包含3部分:RO段,RW段和ZI段RO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write转载 2012-03-28 10:57:33 · 1353 阅读 · 1 评论 -
KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释
KEIL RVMDK编译后的信息 Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const型,RW-data是(Read Write) 初始化了的可读写变量的大小,ZI-data是(Zero Initialize)转载 2012-03-28 11:38:26 · 1502 阅读 · 0 评论 -
KEIL Code RO-data RW-data ZI-data
ARM开发总结的小知识 字节 8位半字 16位字 32位Code, RO-dataRW-data,ZI-dataCode为程序代码部分RO-data 表示 程序定义的常量 const temp;RW-data 表示 已初始化的全局变量ZI-data 表示 未初始化的全局变量Program Size: Code="18248" RO-data=转载 2012-03-28 11:19:26 · 1078 阅读 · 0 评论 -
KeilMDK调试技巧
一、三种编译方式的选择经常看到有些朋友在编译源程序时,总是点击 ,这个按扭的作用是重新编译所有源文件,而不管以前这个工作是否被编译,是否被修改过。我们知道,第一次编译时,会编译所有的源文件,有些工程很大,源文件很多,这个过程比较慢长,有的多达几分钟。因此对于这些比较大的工程,为了节省时间,我们必须搞清楚这三个按钮的使用场合(为了描述的方便,我将这三个按钮分别编号为1,2,3)。下面分别介绍转载 2012-03-28 13:59:38 · 8709 阅读 · 1 评论 -
mdk 优化
使用Keil/MDK这么多年了,一直都没有使用它的代码优化功能。总是觉得在容量可以容纳的情况下没有必要。最近在做一个摄像头项目时,总是只能在TFT上显示大约2/3的图像。其余1/3没有显示。当按键时,整个TFT都能显示,那么按照分析,应该是因为代码是速度太慢造成的。但是分析了一下代码实在没有可以更改的地方了。那么是单片机运行速度问题吗?本代码本来是用IAR编写的,而且在单片机上实现了,效果非常转载 2012-03-28 14:28:16 · 2931 阅读 · 0 评论 -
有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多:(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(转载 2012-03-20 08:58:12 · 841 阅读 · 0 评论 -
可移植到51单片机_T9拼音输入法
#include char * py_ime(char *); void main(void) { while(1) { char input_string[]="yI"; xdata char chinese_string[255]; sprintf(chinese_string,"%s",py_ime(input_string));转载 2012-04-07 13:45:59 · 113011 阅读 · 4 评论 -
STM32 Systick 编程及应用
提到systick 不得不抱怨以下STM32 的用户手册,既然提供了systick 的功能,为啥手册里却只提了一下?后来笔者上网搜的时候,才发现,抱怨的不仅仅是我一个人。闲话不说,下面将笔者搜集的资料进行总结。 一、 systick介绍 Systick 就是一个定时器而已,只是它放在了NVIC 中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。没有学过操作系统的转载 2012-03-20 12:08:26 · 1673 阅读 · 1 评论 -
stm32系统时钟配置函数
/**************************************************************************** * * 名称: RCC_Configuration * * 描述: 设置系统时钟 * * 返回: 无 * ************************************************************原创 2012-05-02 08:05:54 · 2613 阅读 · 1 评论 -
简单代码实现LCD菜单
单片机中 LCD实现菜单方法下面发一段简单的代码:(精华也是代码的一部分如果需要就去CSDN下载吧)//=====================================================================// 菜单指针指向的函数(既索引对应的功能体)//=====================================转载 2012-05-04 08:09:38 · 2957 阅读 · 2 评论 -
bootloader中关于flash擦除写和ram初始化的有关问题
bootloader中关于flash擦除写和ram初始化的问题。最近在做飞思卡尔16位单片机的在线升级bootloader程序。有2个问题不太清楚,请教下论坛里的高人。1.bootloader程序中,对存放应用程序的flash空间进行擦除和写入新的应用程序以完成升级。比较特别的是,需要将flash操作代码拷贝到ram中执行,这是为什么?bootloader程序所在flash空间设置为被转载 2013-12-07 08:45:30 · 5718 阅读 · 1 评论