- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 python自动化脚本能够使用的范围
python能自动化的部分 一些网页。 windows的操作。 可以import对应专用模块的应用程序。 比如。itchat可以控制微信。但是最近也被封了 比如word、excel、pdf等 可以被spy++工具抓取到具体元素的应用软件 无法实现自动化的部分 窗口元素是自绘的应用程序。比如PC版本的微信淘宝 解决方式: 转换为固定位置的鼠标键盘操作 ...
2019-10-22 09:47:29
320
原创 ST的flash操作的异常点
前段时间使用stm32f030C8做IAP功能,发现一个flash的异常情况,至今没有找到合理的解释。记录一下: flash program的流程一般是:flash unlock flash erase page flash program flash lock这种场景下,flash能够正常擦除后写入。如果把流程改成flash unlock flash...
2019-08-28 17:28:45
733
原创 IAP升级的注意事项
如果在IAP中使用到了外设,那么在APP使用这些外设前,需要Deinit这些外设。deinit可以在app开始的时候,也可以在IAP跳转到APP之前操作。我为了把IAP功能集中,把Deinit的工作翻到了IAP中去做。 如果在iap中没有使用中断,那么跳转前只需要对照IAP外设的初始部分,逐个Deinit、关闭时钟即可。 如果在iap中使用到了中断,那么需要做以下部分: 在NVIC中关闭外设...
2019-07-12 14:30:16
1110
原创 使用单个镜像进行MCU的应用程序升级,还是使用乒乓的方式给MCU的应用程序升级
给mcu增加了IAP功能以后,就面临了两个选择。使用使用单个镜像进行MCU的应用程序升级,还是使用乒乓的方式给MCU的应用程序升级? 两者方式各有利弊,1. 使用单个镜像进行MCU的应用程序升级优点:占用的memory空间小,有利于降低mcu成本缺点:一旦升级失败,就无法正常进入应用程序,需要通过IAP重新更新应用程序才行。2.使用乒乓的方式给MCU的应...
2019-07-05 16:47:47
454
原创 如何确保用来存储的的flash部分不被代码code部分占用
曾经在2年多前遇到以下的情况。产品使用了stm32的flash存储用户关键数据。产品试产,给用户使用以后,反应有程序跑飞的情况。分析退货,发现编译器编译了程序后,把一部分代码指定到了最后一个page存储。而最后一个flash page恰好就是存储用户关键数据的。 于是出现以下循环:编译器把部分程序编译保存到了最后一个page-》产品生产出厂-》用户使用,保存关键数据到最后一个p...
2019-06-28 16:33:32
563
原创 结构体指针的使用样例
开发的时候遇到这样一个场景:typedef一个30字节长度的结构体类型,然后建立一个该结构体的数组static ORDER_OBJECT_TypeDef order_object[ORDER_DEVICECOUNT] ;把该数组的首地址作为入参,给一个functionA void functionA(ORDER_OBJECT_TypeDef *p_order_object_...
2018-08-29 09:20:38
1812
原创 .map文件分析
在IAR的工程的Output文件夹中有个.map文件,该文件说明了各个函数占用的尺寸和地址。"A0": place at 0x08000000 { ro section .intvec };"P1": place in [from 0x08000000 to 0x08007fff] { ro };"P2": place in [from 0x20000000 to 0x200027f
2017-12-27 08:33:08
17917
原创 查看工程中的库文件和.o文件的调用
工程右键->Option->Linker->List->Generate log file &Module selections在工程的output目录下会有一个.log文件例如Loading object F:\Github\IAP\STM32L1xx in-application programming (IAP) using the USARTproject\STM3
2017-12-26 09:06:18
1802
原创 M3的MCU的启动过程
这段时间再看bootloader相关的内容,因此也想了解下main函数之前,mcu做了什么。参考的文档和博客的地址如下:http://www.sunyouqun.com/2017/05/mcu-startup-procedure/先抄一张图,这张图描述了MCU的映像文件“所谓映像文件,就是工程编译完成后生成的bin文件。映像文件起始位置存放中断向量表(Vector Ta
2017-12-22 16:15:15
3680
原创 如何调试程序时 从第一条指令开始执行
一般我们在iar上面调试的时候,程序往往是从main函数的第一行开始运行的。当我们需要查看main函数之前的操作流程的时候,就需要进行以下的设置:在工程上面右键->option->Debugger->Setup->run to main之前的勾去掉
2017-12-22 15:16:25
3298
原创 CC2640外设的object &HWAttrs & fxn & config
在cc2640的board相关的文件中,经常会看到如下的配置:/* SPI objects */SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650_LAUNCHXL_SPICOUNT];/* SPI configuration structure, describing which pins are to be used */const SPI
2017-12-15 15:21:33
883
原创 当指针作为局部指针变量时的注意事项
情形1:uint8_t func(uint8_t a){ uint8_t temp =0 ;/*用输入变量a计算temp的值*/ return temp ;}这样是OK的,因为返回的是temp的副本情形2uint8_t *func(uint8_t a){ uint8_t temp =0 ;/*用输入变量a计算temp的值*
2017-11-28 13:30:23
1213
原创 OAD(OTA)完成后,蓝牙设备没有重启的原因
CC2640在OAD(OTA)完成以后,会主动断开蓝牙连接,然后重启。但是测试时会发现有时OAD成功,但是CC2640没有重启。需要手动重启CC2640.后来找到原因:手机app收到蓝牙的断开蓝牙连接通知,但是依然持有character,依然保持蓝牙连接。此时手机app主动把蓝牙断开,CC2640就会正常重启。
2017-11-28 09:09:29
646
原创 CC2640的Flash操作
在CC2640里,osal_snv_write的API函数是基于ICall层来操作的。因此,需要把flash操作和simplepherial的task绑定。在上述task初始化时,增加FlashOperationMessage_RegisterAppCBs(&user_flashOperationMessageCBs);在变量设初始值时,设定static flashOp
2017-11-21 10:56:59
1578
原创 Andriod8.0扫描不到BLE设备的原因
昨天尝鲜升级了一次手机系统,把系统升级到了Android8.0。今天测试的时候意外发现扫描不到自己的蓝牙小设备(假如定义为设备A)。描述如下:1. Android8.0 + nrf connect扫描不到设备A,但是可以正常扫描到苹果手表和小米手环2.2. Android8.0+系统蓝牙也扫描不到设备A,但是可以正常扫描到苹果手表和小米手环2.3. Android(其他版本)+ n
2017-11-16 16:44:10
10691
12
原创 获取寄存器地址的方法
如果需要使用TX1的DMA传输,就会涉及到配置DMA的外设地址。在这里,外设地址应该是USART1的DR寄存器的地址。可是如何获取该寄存器的地址呢?现在实测了3种方式,都可以实现。方法1:直接查询手册中寄存器映像(map),USART1的DR地址为0x40013804方法2:手册中查看,DR寄存器的偏移地址为0X04,那么USART1的DR地址可以写成(USART1
2017-11-16 11:21:30
9598
原创 LL库通过串口+DMA方式发送数据
在RM0038(L151的手册)中的Chapter 27.3.13 Continuous communication using DMA章节有配置的方式和顺序:Transmission using DMA:DMA mode can be enabled for transmission by setting DMAT bit in the USART_CR3 register.
2017-11-16 10:46:52
12925
2
原创 RTOS下不同任务传值的方式
开发ios的同事反馈说,最近一版的蓝牙连接时,20次里面会有1~2次回复“未识别的命令”。虽然经过半天的查找和测试,ios的code里面改动了些东西,概率有了显著的下降,但是50次依然有1~2次回复“未识别的命令”。后来ios的code做了容错处理,问题消失,但是我心里依然明白:问题并没有从根本上解决。我没法对这个问题做评估,最坏的结果是这个小bug还有可能会危害到整个系统。未完待续
2017-11-14 17:00:00
1033
原创 如何使用Stm32CubeMX和LL库实现窗口看门狗
窗口看门狗对时间的要求比独立看门狗更加严格。必须在设定的上限时间和下限时间之间喂狗,如果喂狗时间高于上限时间或者低于下限时间,都会导致看门狗触发重启机制。其中下限时间是系统固定的,为0X40。上限时间是用户可以定义的,大于0X40同时小于0X7F即可。 在Stm32CubeMX里面,WWDG的上限时间为:WWDG window value,WWDG不断减少的Couner名为:WWDG
2017-11-13 13:55:18
2891
1
原创 如何让stm32L151工作在使用LL库的情况下 ,运行在32M时钟
Stm32L151是用来做低功耗应用的,该芯片虽然也是M3的核,但是最大只能工作在32M(比f103的64M(HSI)和72M(HSE)相差巨大)第一次使用Stm32CubeMX配置该芯片,生成工程后竟然无法执行。时钟树配置如下图调试断点后,判断程序死在了这段代码位置void SystemClock_Config(void){ LL_FLASH_SetLatency(L
2017-11-10 17:06:45
3286
原创 STM32CubeMX+FreeRTOS实验---使用os timer
在STM32CubeMX的FreeRTOS配置中,使能FreeRTOS的Software Timer功能修改timer的名称及callback名称等可以看到,在生成工程的main.c文件的main函数中,有以下code /* Create the timer(s) */ /* definition and creation of myTimer01 */ osTime
2017-11-10 10:34:04
9948
原创 指针作为局部变量的注意事项
参见http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183962.html所述。#include //此函数中d也是个局部变量,函数执行完自动销毁,但是指针分配的空间不会被自动回收,除非程序员delete掉。//所以这个可以正常输出。char *a(){ char *d = "ZET";//这个初始化的一种形式,相当
2017-11-10 09:11:01
5387
原创 STM32CubeMX+FreeRTOS实验---使用两个实例,共用一个task
假如有两个Task,行为类型,只是个别参数不一样。那么可以使用同一个task,来实现两个实例。这两个实例是相互独立的:Each created instance will execute independentlyunder the control of the FreeRTOS scheduler. 以两个LED的task任务为例子,假设LED1和LED2都是每1s变换一次。那么,建
2017-11-08 16:14:20
12848
原创 Stm32cubeMX+FreeRTOS的Flash占用情况
情况1:1. 使用两个空Task+1个timer+1个queue2.10 404 bytes of readonly code memory 80 bytes of readonly data memory 5 752 bytes of readwrite data memory
2017-11-07 15:57:39
2900
原创 芯片选择LL库还是HAL库
LL库和HAL的选择主要根据两点:1. ST官方是否支持2. 芯片Flash和SRAM是否宽裕。要查看官方是否支持,可以执行以下操作执行:1. 下载安装最新的STM32CubeMX,选择芯片型号后,Project-》Setting-》Advanced Setting2. 查看相关驱动的下拉菜单,看是否有LL选项,如果有的话,就可以选择,如下图,这个芯片使用是STM32F
2017-11-07 10:09:20
11007
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人