stm32学习
一枚努力的程序猿
磨刀不误砍柴工
展开
-
往falsh写数据中断
现场:为了测试数据存储的对不对,随便在flash中划分了一块区域写入,但是发现写到一半就死机,无法继续写定位:发现往固定地址写数据没有问题,程序空白时地址连续增加写入也没有问题,但是将rtc的一句代码添加后导致卡死。rtc的那句代码确定没有问题,但是合在一起后出现问题。解决办法:flash划分的区域不合适,划分的地址太小,导致再次写入时运行的程序被破坏死机。flash从0x2000开始写,从bin的大小超过了0x2000,导致破坏了mcu的程序,死机; 解决方法:将flash开始的地址划分.原创 2021-05-12 17:26:07 · 381 阅读 · 0 评论 -
调试spi-apollo4
apollo4的spi使用iom,根据datasheet选择合适的IOMx,配置对应的pin脚;使能片选信号后,若能无法通信,需要检查下sensor的供电情况,有的板子需要手动使能gpio管脚给sensor供电。原创 2021-02-20 15:27:50 · 619 阅读 · 4 评论 -
stm32的IIC知识点
当向EEPROM写数据的时候,EEPROM会发送应答;当向EEPROM读数据时,读到数据时要向EEPROM发送应答,这部分是我们写的以下为模拟的IIC通信代码,好复杂#include "sys.h"#ifndef __IIC_H#define __IIC_H#include "sys.h"// ÀûÓÃGPIOÄ£ÄâIICͨÐÅ#def原创 2017-05-17 11:51:02 · 1084 阅读 · 0 评论 -
找不到头文件:eg:identifier "EXTI_InitTypeDef"
出现identifier错误,是因为在stm32f4xx_conf.h中没有将include “stm32f4xx_exti.h” 屏蔽了include原创 2017-05-09 15:35:35 · 2112 阅读 · 0 评论 -
stm32串口通信
//实现了stm32的串口通信,向stm32中发送数据,或者利用串口发送数据到stm32,其中应用了中断,到接收的数据完成了,发生中断,将数据发出!以回车为结束,每次接收一个字节,放到全局变量USART_RX_BUF中。#include "stm32f4xx.h"#include "stdio.h"#define USART_REC_LEN 200 #def原创 2017-05-09 13:14:55 · 893 阅读 · 0 评论 -
STM32 SPI通信时钟极性和相位设置
通过 SPI_CR1 寄存器中的 CPOL 和 CPHA 位,可以用软件选择四种可能的时序关系。 CPOL(时钟极性)位控制不传任何数据时的时钟电平状态。此位对主器件和从 器件都有作 用。如果复位 CPOL,SCK 引脚在空闲状态处于低电平。如果将 CPOL 置 1,SCK 引脚在 空闲状态处于高电平。如果将 CPHA(时钟相位)位置 1,则 SCK 引脚上的第二个边沿(如果复位 CP原创 2017-05-17 15:51:23 · 3900 阅读 · 0 评论 -
stm32 undefined symbol main(referred from _rtentry2.0 )
CORE文件夹中有个替换文件,直接替换不可用,故重新建一个出现:Error L6218:undefined symbol main(referred from _rtentry2.0)原因是: 没有添加main文件(囧),原创 2017-04-27 16:02:38 · 3313 阅读 · 2 评论 -
独立看门狗实验
// 独立看门狗怎么控制LED灯的?//看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0原创 2017-05-10 11:17:41 · 647 阅读 · 2 评论 -
stm32外部中断实验
// 上一篇是关于串口通信的,用到GPIO的复用,将GPIO复用为usart串口;// 此处是利用按键进行中断处理,这里配置GPIO模式为输入,因为要接收按键的状态;//GPIO端口有很多,ABCD....但是中断只有22个,其中0~15个中断中断线与IO端口一一对应,需要配置GPIO与中断线的映射关系,(类似于端口复用)这里利用了函数:SYSCFG_EXTILineConfig(EXTI原创 2017-05-09 17:11:36 · 3181 阅读 · 0 评论 -
串口看门狗实验
// 独立看门狗没有中断,WWDG有// IWDG有时钟(LSI),wwdg需要挂载(PCK1:APB1)// IWDG是12位递减的。WWDG是7位递减的// IWDG只有下限,WWDG有下限和上限// IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口原创 2017-05-10 15:42:20 · 993 阅读 · 0 评论 -
stm32 F407串口通信出现乱码
一直用正点原子的例程,后面开始在官网上下载库,完成自己写,到串口通信这里,发现写的东西跟例程一样,输出一直是乱码;折腾半天是因为 晶振的问题。 我的板子HSE晶振为8M,分频是8;官网提供的25M,分频为25;(为什么分频后相同不能用?是因为板子晶振不对?)(为什么官网的晶振频率不可更改 25 ?);现在只是打印字符,还没有进行通信修改后正确;修改后输出正确结果,之前都是原创 2017-05-08 11:03:18 · 3542 阅读 · 2 评论 -
IIC通信
下面介绍ATMEL公司的串行E2PROM产品——AT24C系列AT24C01:128字节(128×8位);AT24C02:256字节(256×8位);AT24C04:512字节(512×8位)AT24C08:1K字节(1K×8位);AT24C16:2K字节(2K×8位); 本次实验用的是AT24C02,所以存储器的地址有256字节(在IIC总线寻址中转载 2017-05-16 09:37:36 · 703 阅读 · 0 评论 -
stm32中中断名和中断处理函数名所在位置
两个文件分别在stm32f4xx.h(中断名)CORE---startup_stm32f40_41xxx.s(中断函数名)#if defined (STM32F40_41xxx) CAN1_TX_IRQn = 19, /*! CAN1_RX0_IRQn = 20, /*! CAN1_RX1_原创 2017-05-11 10:09:29 · 19406 阅读 · 1 评论 -
中断中判断状态标志位
编写中断处理函数时,在中断产生以后,需要通过状态寄存器的值判断此次产生的中断属于什么类型,然后执行相关的操作。本处以定时器中断更新为例:在固件库里面,用来读取中断状态寄存器的值判断中断属于什么类型的函数为:ITStatus TIM_GetITStatus(TIM_TypeDef * TIMx, uint16_t TIM_IT);该函数的作用为,判断定时器TIMx的中断类型TIM原创 2017-05-11 10:56:58 · 4275 阅读 · 0 评论 -
stm32定时器中断实验
//个人总结:所有的中断实验都是设置好中断的条件,编写中断处理函数;之前是串口通信,当串口发送数据时,将数据打印出;后来是外部中断,这里用到了外部时钟,发生外部输入中断时,进行处理;看门狗(独立看门狗和窗口看门狗)都是在内部引起的MCU复位;这里的定时器中断,发生更新时,进行中断处理函数。#include "stm32f4xx.h"void delay(void);vo原创 2017-05-11 11:05:09 · 1650 阅读 · 0 评论 -
stm32的复用和中断
stm32中通过结构体将寄存器组织在一起,通过修改结构体成员变量的值就可以达到操作对应寄存器的值。这些都是在stm32f4xx.h文件中完成的。1 要使用IO复用功能外设,必须先打开相应地IO口时钟和复用功能时钟外设。 如 USART1接PA9 、PA10,需要使能GPIOA ,USART12 需要将GPIOA中的MODER寄存器中的IO口(PA9 PA10)配置为复用功原创 2017-04-26 09:21:01 · 1470 阅读 · 0 评论 -
stm32时钟分割
http://blog.sina.com.cn/s/blog_76c545390100ovfj.html不太明白(1) TIM_Perscaler来设置预分频系数;(2) TIM_ClockDivision来设置时钟分割(时钟分频因子);(3) TIM_CounterMode来设置计数器模式;时钟分割定义转载 2017-05-11 14:11:32 · 5797 阅读 · 2 评论 -
pwm输出实验
极性设置,pwm占空比改变,#include "stm32f4xx.h"void delay();void tim14_init(u32 arr,u32 pre);int main(){ u16 led0pwmval=0;u8 dir=1;delay();tim14_init(500-1,84-1);while(1){delay();if原创 2017-05-11 17:05:58 · 2004 阅读 · 1 评论 -
搁置
// 输出灯完成不亮,目前没有找到问题,搁置待细细查看#include "stm32f4xx.h"void delay();void pwm_init(u32 arr,u32 pre); // pwm¿ØÖƵƵÄÁÁ°µint main(){u16 led0val=0;u8 dir=1;delay();pwm_init(500-1,84-1原创 2017-05-12 15:49:17 · 755 阅读 · 0 评论 -
stm32 IIC通信
10bit的寻址扩展可能寻址的数目.有7bit地址和10bit地址的设备可以连接到相同的I2C总线上,而且7bit寻址和10bit寻址都可以用在所有的总线速度模式下.不过,10bit寻址用的不多.10bit的从机地址由开始条件(S)或重复开始条件(Sr)后的两个字节组成.第一个字节的前7位是1111 0XX,XX是10bit地址的最高有效位的前两位.第一个字节的第8bit是读写位,决定传输方向转载 2017-05-15 14:23:41 · 1521 阅读 · 0 评论 -
STM32F407的定时器时钟频率
//实验的思路为对TIM3进行初始化后,进入死循环等到TIM3的溢出中断,当TIM3_CNT的值等于TIM3_ARR时, 就会产生TIM3的中断,进入中断处理函数;TIM3_CNT从0开始计数。// 看一下时钟频率根据时钟树得到TIM3挂载在APB1时钟上,APB1来自SYSCLK时钟,是来自PLLCLK,有HSE时钟经过分频-倍频-分频得到的;stm32F407中时钟HSE的原创 2017-05-10 17:57:42 · 6261 阅读 · 0 评论 -
stm32 unknown target connected 和 ST-LINK USB communication error错误
1 在下载中,突然出现错误unknown target connected 原来使用的JTAG下载,后来改为SW下载,问题消失;2 感觉没有解决根本,又换回JTAG下载,发现出现新问题:ST-LINK USB communication error。这下换回SW下载也仍旧解决不了。网上说是驱动STM32 STLlink的问题:http://bbs.elecfans.com/jish原创 2017-05-11 09:48:15 · 16380 阅读 · 1 评论