stm32调试经验12p

上传人:简****9 文档编号:98221191 上传时间:2019-09-09 格式:DOC 页数:12 大小:80.83KB
返回 下载 相关 举报
stm32调试经验12p_第1页
第1页 / 共12页
stm32调试经验12p_第2页
第2页 / 共12页
stm32调试经验12p_第3页
第3页 / 共12页
stm32调试经验12p_第4页
第4页 / 共12页
stm32调试经验12p_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《stm32调试经验12p》由会员分享,可在线阅读,更多相关《stm32调试经验12p(12页珍藏版)》请在金锄头文库上搜索。

1、PVD /可编程电压检测器1. Lib中加入stm32f10x_pwr.c和bkp.c文件。2. 去掉conf.h中的两个注释3. 开启时钟APB1的BKP和PWR4. PVD的中断时位于EXTI16上的外部中断5. 具体步骤:缺省值设置,清中断标志位,选择中断线路,模式,触发方式,线路使能,初始化结构体,后备寄存器操作使能,设置电压的阀值,使能PVD6. 中断的优先级推荐选择抢占最高级7. PVD中断中保存的数据量和供电的电源上的电容大小有绝对关系。SPI /串行外设接口1. 加入spi.c文件,去掉conf.h中的两个注释2. 开启时钟APB2(SPI1),开启端口复用3. 配置SPI的M

2、ISO,MOSI,Clock,NSS(复用推挽输出,浮空输入,NSS选择软件模式不需要配置,但是模块的NSS还是需要设置的)4. 用开发板的话,需要失能其他不用的SPI模块,避免出现问题。5. 结构体数组初始化,模式,极性,相位,校验,等等。6. SPI的发送和接收,SPI读数据需要发送任意数据才能读。(原因是主设备提供时钟)7. SPI的NSS引脚在硬件模式下可输入可输出,设置主模式输出模式的时候需要SPI_SSOutputCmd(SPI1, ENABLE);8. (16.6.14)SPI不用中断的发送接收函数测试:SPI是全双工,读写分别有数据线,共用SCK时钟,写,读是同步进行,不过操作

3、具体芯片的时候,返回值要根据芯片的datasheet操作。所以一般读的时候都需要写数据启动时钟。9. (16.7.27)用IO口模拟时序的时候,MOSI和MISO的初始化引脚置高2016/3/11. B码程序MAX485在无输入信号的情况下,输出保持高电平。2. 定时器输入捕获的时候,捕获上升沿时,捕获引脚设置为下拉输入。3. 上拉输入:外部无信号输入时,引脚电平保持高电平(比如I2C)4. 在定时器输入捕获时,捕获引脚设置成浮空输入的话,引脚电平状态是不稳定的,有波动2016/3/30 I2C1. STM32的硬件I2C模块不稳定,使用软件模拟时序的方式使用I2C模块,硬件I2C存在Bug.

4、2. FATFS32的MP3程序在支持中文文件名之后存在目录读取英文文件名失败的现象,此问题未解决(已解决,指针地址没有回送)。2016/4/5CAN1. 在设置一个寄存器之前,相应的位先清空,再设置。2. CAN总线告一段落,设置CAN总线CAN_InitTypeDef (设置工作模式,波特率)和 CAN_FilterInitTypeDef (设置屏蔽滤波器)。3. 设置发送报文的ID格式,IDE,RTR,数据等参数CanTxMsg 和 CanRxMsg。4. 相应的中断。屏蔽过滤寄存器关联FIFO,FIFO0时是USB_LP_CAN1_RX0_IRQHandler。FIFO1时是CAN1_

5、RX1_IRQHandler。2016/4/5中断1 Stm32f10x_it.c中的中断名称 是在startup_stm32f10x_hd.s中查找添加。2 NVIC组管理中的中断通道名称 是在 stm32f10x_it.h中查找添加。2016/4/13 Systick 和 TFT触摸屏1. systick在设置成1us中断时,容易出现问题,具体的等液晶触摸屏功能实现后再测试。2. TFT触摸屏使用SPI通信时,SPI的频率选择速度太快(8分频)时,高电平的时间达不到200ns,会丢失数据。3. 等差数列中位数(a0+an)/24. 触摸屏使用中断法画点的时候,出现描点非常慢的现象。解决:因

6、为串口不停的在打印消息占用中断资源,在描点的时候不要打印5. 液晶取模软件的使用,字模3和 LCD2002完美版,取模的方式不同,字模3是整体取模,但是LCD是每个字单独取模,所以编程上不同。2016.8.42016/4/23 定时器延迟函数 1. 定时器更新标志位放在结构体初始化前清空标志位2016/4/25 Modbus 之CRC校验1. 串口发送数据时或者检测定时器更新事件时,通过读SR的相应标志位保证发送或者事件的发生。2.Modbus的CRC16校验在发送时是 低8位在前,高8位在后。3.注意运算符的优先级问题。4. 对于memcpy(目标数组,源数组,个数) 。5. A? b:c

7、若A为真,则表达式b;若B为假,则表达式C2016/4/27 SD response ,数据地址1. Some SDs command have response, their saved in SDIO_RESPx register.2. When write the addresss data, if address=0, Data width is 4. So when you write in the address 3, you should be 3*4=12 , Use 12 replace 3.Example: Address 0use 0 1 2 3 , Address1us

8、e 4 5 6 7 , Address2head address= 2*4=8 9 10 11.Example: Sector * block size 上面是应用在字节一一对应3. normal u16 a=1,2,3; a 的地址如果是m ,那么a1的地址就是m+2 u32的数组就是m+4 u8 的数组就是 m+12016/4/28 SPI1. SPI的接收寄存器SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; /没有数据传输的时候,时钟保持低电平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /在第一个时钟边沿

9、处理数据2016/4/29 1. 外部中断模式的选择,选择是中断模式还是事件模式2016/5/51.平年闰年判断if(timesVal5%400=0)|(timesVal5%4=0)&(timesVal5%100!=0) /如果为闰年DaysOfMouth1=29;elseDaysOfMouth1=28;2016/5/13 中断一. 电平同时变化1. 中断上下边沿的时间间隔1us时。(即高电平保持1us) 结论:丢失STM32外部中断比如,EXTI95的中断,选择PB6,PB7作为外部中断输入,如果外部中断同时来的话,比如:先下降后上升,第一个边沿都能进中断函数,并且按照函数顺序处理(只进一次

10、中断),但是,当第二个边沿来时会丢失函数顺序靠后的中断线函数。2. 中断上下边沿的时间间隔1ms时(即高电平保持1ms) 结论:不丢失STM32外部中断线都能很好的进入相应的中断处理函数,比如Line6与Line7 都可以相应的判断处理。前提是中断处理函数中的程序小于1ms3.一般在编程的时候中断中函数用systick计算时间。Systick的us级中断使用时,在systick中断函数中的程序就不能超过1us否则死中断了。4.外部中断设置上下降沿双触发时,触发上升沿后再触发下降沿时,STM32内核可能需要时间设置,所以如果脉冲边沿间隔时间太短容易丢失,1us会丢失。二. 电平单独线路中断1.单

11、个中断线的中断,当中断处理函数执行时间t大于电平跳变时间t2时,如果设置捕捉上升下降跳变中断t2的下降(或上升)沿中断会丢失。三. STM32的中断与事件产生中断一定产生事件,事件不可屏蔽,中断可以屏蔽2016/5/18 串口不用microLib 的打印1. 不用microLib的printf函数,自己的版本需要改写。原子的源码和自己写的串口初始化程序有点问题,fput需要改动待测的标志位。2016/7/2LWIP源码无法PING通对应GPIO口需要改写,在初始化的时候,尤其是复位口,还有片选口,一定需要给确定的状态,在移植时,源码的片选操作端口也要对应的改2016/7/4 1. LWIP源码

12、网页无法打开 2. LWIP网页无法刷新1. 数据包发送函数调用的写buff函数时序逻辑错误和datasheet不相符合(多加了一句空指令)。2. 发送函数的计数初值类型u8 过小,实际为u16 ,网页实质已经刷新,但是前256个数据一样,所以造成没有刷新的假象。2016/7/142016/7/29 nrf24l01调试经验1. 串口调试助手,在选HEX发送时,发0x01时,只要输入 01 发送就是0x012. 在调试的时候,尤其是调试开发板的时候,一定需要检查板子上一些模块可能共用的总线有干扰3. STM32 在上电后只要是没有初始化的端口,GPIO的属性都是低电平4. 51单片机上电后只要

13、是没有给初值的端口,IO口都是高电平5. NRF24L01工作在增强型shockburst 模式时,发送和接收模式都需要设置自动重发功能,增强型比普通型更加可靠,有应答和自动重发的功能。6. 操作新的模块时一定需要把工作模式和寄存器的配置弄清楚7. 在头文件里定义数组的时候,需要加static 否则,在放在STM32f10x.h一起包含的时候,会出现重复定义。函数声明放在.h中就不会出现。8. 在配置无线模块地址时,地址宽度P0,P1的地址最长5位,模块先写地址低字节,P1-P5的地址只有最低位可以设置。9. 自动应答模式和自动重发关闭时,实测速率可达64KB/s,自动应答模式下速率40KB/

14、s.10. 只有P0地址可以接受自动应答,而且发送端发送地址等于接收地址。 STM32下载完有变化的程序后,如果出现没有变化,那么断电再开。前一次和后一次外设时钟关闭有可能没关掉,得重启2016/8/31STM32的I2C一. C语言编程函数1. Strstr(str1,str2) strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。char *strcpy(char* dest, const char *src);说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。2. abs(int i)求绝对值3. sqrt(a) , a=0开平方4. int sprintf( char *buffer, const char *format, argument );将 String: %sn 强制转换写入到buffer200的数组并且 %s处 已经用s替换成”computer”char buffer200, s = computer ;sprintf( buffer, String: %sn, s );返回值是写入buffer 的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号