推荐阅读最新更新时间:2024-03-16 15:11
STM32之EXTI
STM32因为具有NVIC使其中断体系大大提升,NVIC使用来管理异常与中断的,并且NVIC模块中还包含SysTick。 这次我们来讲一下EXTI外部中断。 1.在用到时我们必须要设置中断向量表,我们要将中断向量表存储在一个固定的位置,究竟是RAM还是FLASH就得看你的需求了。 2.STM32中中断优先级分组总共有四种分组方式,我们只能用其中的一组。所以在设置完毕中断向量表的存储位置后我们就得选择合适我们的中断优先级分组。(这一部分可以我的STM32之NVIC一文) 3.然后你要使用哪个外部中断就对此中断设置抢占优先级,亚优先级,以及打开。 4.然后就是相应中断的模式,方式,等配置了 5.设置相应的引脚为输入
[单片机]
在stm32中使用while循环导致程序卡死
今天在使用stm32的过程中发现这样一个问题,程序莫名卡死。 先来看导致卡死的代码 while ( ReadRawRC ( CommandReg ) & 0x10 );1 这是我们在程序中经常用到的写法,容易理解,程序的作用的读出一份数据,然后判断他的第4位是否为0,如果为0,则跳出循环,否则程序卡死等待。 也正因为这里的等待,导致读出的数据第4位不为0时程序卡死。 我自己的建议是: (1)如果程序需要写成while卡死等待的形式,可以在while循环后面加一句串口输出,当程序卡死时,如果没有串口输出数据,就证明程序是卡死在了while循环处 (2)加超时判断,这是我们单片机老师在讲课的时候提到的,当等待的时间超过一定限度时
[单片机]
spi时序图 判别
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。一个周期起始
[单片机]
STM32 ST-LINK Utility无法下载的处理方法
现象:提示family: Unknown device Read out protection is activated. Could not disable Read Out Protection! 分析:由于STM内部提供了数据保护,有读出保护和写保护。禁止读出保护起作用,那么下载器就读不出内容了。是为了防止盗版的功能。做产品应该使用。 解决办法:只能把写保护、读保护取消,并擦出整个芯片。 首先,连接板子与PC,进入Dos命令行,进入C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility目录下,执行S
[单片机]
STM32与四线电阻触摸屏的接口电路
如下图所示,STM32F103F103与四线电阻触摸屏直接通过自身的I/O口连接,实现触摸屏控制器功能。其中PA8、PA9、PA10、 PA11分别作为四个三极管的控制端,通过控制三极管通断,来控制四线触摸屏的Y+、Y-、X+、X-.PA1,PA2是两个A/D转换通道,分别连接 Y+和X+用于计算触摸点的X和 Y坐标。PA3连接内部中断用于检测触摸屏是否有触摸动作。触摸屏平时运行时,令PA8、PA9、PA11输出0,PA10=1,即只让VT2导通。当有触摸动作时,D1导通给PA3一个中断信号,STM32F103接收到中断请求后立即置PA8=1,导通VT1,这样在Y+、Y-方向上就加上电压,同时启动A/D转换通道PA2,通过输入
[单片机]
8051单片机和STM32单片机的编程环境对比
单片机编程是一门实战性的技术,程序要在单片机平台上跑起来才能看到效果、才能积累编程经验。在学校学习单片机课程时,可能会感觉到一直有一种脱节的感觉,因为一直没有用武之地。其实学习单片机很简单,第一步就是搞清楚编程环境。 入门单片机时,我们常用51型8051单片机和STM32单片机。这两种单片机比较典型,因为学校里单片机课程是基于51单片机的,而STM32的单片机则具有较多的学习资料。下面就这两种单片机介绍一下编程环境。 1、单片机常用的编程环境 比较流行的单片机环境有keil和IAR,这两种环境可以覆盖市面上90%的单片机型号,而且都提供了函数库。根据单片机位数不同,这两个编程环境也有不同的版本。 1.1 Keil的常用版本
[单片机]
一个关于STM32 FLASH编程应用相关的话题
“下面代码是stm32F1库函数中对flash写入一个字的函数部分,其中在给用u32表示的地址address赋值时,通过(_IO uint16_t*)将Address强制转换成了一个16位数的地址。很不理解为什么要转成16位的。实验改成32位后发现写入flash又不成功。很不理解,这是为什么?” FLASH_Status FLASH_ProgramWord(uint32_tAddress, uint32_t Data) { FLASH_Status status = FLASH_COMPLETE; __IOuint32_t tmp = 0; assert_param(IS_FLASH_ADDRESS(
[单片机]
STM32单片机FSMC的使用解析
在做项目的过程中遇到了这个问题,感觉文章写得不错,共享给对FSMC的使用怀有疑惑的同伴们! LCD有如下控制线: CS:Chip Select片选,低电平有效 RS:Register Select寄存器选择 WR:Write写信号,低电平有效 RD:Read读信号,低电平有效 RESET:重启信号,低电平有效 DB0-DB15:数据线 假如这些线,全部用普通IO口控制。根据LCD控制芯片手册(大部分控制芯片时序差不多): 如果情况如下: DB0-DB15的IO全部为1(表示数据0xff),也可以为其他任意值,这里以0xff为例。 CS为0(表示选上芯片,CS拉低时,芯片对传入的数据才会有效) RS为1(表示DB0-15上传
[单片机]