MCU
文章平均质量分 64
高精度计算机视觉
人工智能与视像技术,对技术有点执着
展开
-
LWIP_TCP如何理解数据发送,何时使用tcp_recved函数
这里只讲raw编程,如果你使用LWIP-socket或netconn,那就不存在这个问题,这些高级函数会自己在合适的地方调用tcp_recved函数。问题总是重复的。对于初学者而言,有不少网络上流传的源码,一个典型的例子是tcp_echoserver。各个教学的资料中也都提供源码。但很可惜,这些教学板提供的源码缺乏可移植性。一具最常见的错误在于,大家对于什么时候调用tcp_reved没什么概念...原创 2020-05-05 13:35:14 · 10765 阅读 · 6 评论 -
MCU_STM32F4XX_HAL_ADC_Start_DMA只能触发一次的问题
说明:这可能是STM32F4XX芯片的一个BUG。有些时候,单片机的问题非常奇怪,单一功能使用的时候没有问题,但同样的代码,在大型工程中漏洞百出;作为用户,我们无法知道芯片内部到底发生了什么,因为也只能一步步随机尝试。问题:一个大型工程,在加入ADC的时候,发现HAL_ADC_Start_DMA始终只能触发一次,后续无论怎么Start,都没能成功。在记录一下追踪的前因后果和解决方案。使用STM32CubeMX的精简调试方案没有问题在找问题的过程中,首先是用CubeMX创建一个工程调试一下。为原创 2021-06-28 13:02:12 · 7633 阅读 · 10 评论 -
Win10安装EZ-USB FX2LP CY7C68013(A)驱动程序的方法
FX2LP(cy7c68013)是一个非常灵活的USB高速控制器,在应用中经常要用到,因此这里介绍如何安装该USB控制芯片的驱动;首先,连接你的USB到电脑,系统会提示出现未知设备,根据系统的不同,有的出现在未知设备下,有的会出现在通用串行总线控制器下面,如下图所示,然后,右击属性,如下图所示可以看到下面的信息记住这个信息:VID_04b4&PID_8613然后打开下面这个文件下载地址具体我记不住了,我这里已经下载好了,大约在这里,https://www.cyp原创 2021-03-21 22:56:04 · 10039 阅读 · 4 评论 -
C++中ASCII码和HEX十六进制的相互转换
把ASCII字符转换成数值,unsigned char ascii2value(unsigned char c){ if ('0' <= c && c <= '9') return c - '0'; else if ('a' <= c && c <= 'f') return c - 'a' + 10; else if ('A' <= c && c <= 'F')...原创 2021-03-17 22:13:40 · 4875 阅读 · 0 评论 -
协议——SCCB与IIC的区别
SCCB(Serial Camera Control Bus,串行摄像头控制总线)是由OV(OmniVision的简称)公司定义和发展的三线式串行总线,该总线控制着摄像头大部分的功能,包括图像数据格式、分辨率以及图像处理参数等。结构框图如下所示: OV公司为了减少传感器引脚的封装,现在SCCB总线大多采用两线式接口总线。OV7725使用的是两线式接口总线,该接口总线包括SIO_C串行时钟输入线和SIO_D串行双向数据线,分别相当于IIC协议的SCL信号线和SDA信号线。SIO_C的最小时间转载 2021-03-16 18:17:31 · 935 阅读 · 0 评论 -
图像工具winhex:如何把图片文件如JPEG按16进制字节转变成C源码
举例,网上找到的一张320x240的图片,如下,使用winhex,然后paste到文本文件,就是下面这个样式(16进制按字节的C源码形式),unsigned char data[40598] = { 0xFF, 0xD8, 0xFF, 0xE1, 0x18, 0x85, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00, 0x4D, 0x4D, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0x01, 0x12原创 2021-01-26 10:35:30 · 4116 阅读 · 3 评论 -
MCU_STM32H7XX系列通过STM32CUBEMX配置MCO2
因为要给STM32H7xx系列的芯片配置MCO2输出,发现按网上的配置死活不能启动MCO2,系统时钟配置如下void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; /** Supply configu原创 2021-01-22 14:55:48 · 1540 阅读 · 1 评论 -
电子元件二极管封装SMA,SMB,SMC的区别
某个电路使用二极管(典型的如肖特基二极管SS14SS24SS34),发现居然有三个规格,SMA, SMB, SMC,找了一下其区别,记录如下,从下面图片的来看,可以看出主要体积上不同:SMA<SMB<SMC.当然,从成本和体积来说,优先选用最小尺寸的SMA/DO-214AC封装。但尺寸越大,功率也越高(一般我们是指长时间稳定运行时的功率,不是指测试时的峰值,当然,在同样条件下,SMC的峰值功率都应该是最高的),在功率相对较高的场合,则需要使用大一些的封装尺寸。例如,A...原创 2020-08-08 00:25:23 · 28667 阅读 · 0 评论 -
MCU_C语言中 数组型指针 的应用 -- char (*stringp)[]
定义一个指向数组的指针stringpchar (*stringp)[];取得某个数组的地址 :char *dst = &string[10];指针指向该数组的某个位置:stringp = (char (*)[])dst;原创 2020-05-22 14:33:19 · 376 阅读 · 0 评论 -
MCU_STM32F4xx使用CCM RAM
关于如何使用CCM RAM, ST官方文件中已经说得很清楚了,这里就不再重复了,参考(点击下载):AN4296 Use STM32F3/STM32G4 CCM SRAM with IAR™ EWARM, Keil® MDK-ARM and GNU-based toolchains这里要注意的是,CCM直接连接到了D-BUS上面,下面两张图,一张来自AN4296,一张来自stm32f4xx系列的DATASHEET。使用时要注意的是,CCM只和DBUS直接相连,没有和外设相连,所以不能用作DMA之类原创 2020-05-21 22:56:39 · 2297 阅读 · 1 评论 -
MCU_STM32CUBEMX配置生成CAN2的初始化代码的修改
备注一个STM32CUBEMX配置CAN2的遗忘点。STM32F105/107(405/407)有两个CAN,一般我们两个都会用起来,用STM32CubeMX配置好后,有一个经常容易忘记的地方就是SlaveStartFilterBank这个参数。这里他是最重要的和hcan1不一致的地方, CAN2_FilerConf.SlaveStartFilterBank = 14;这一句必须开启,否则CAN2只能发送数据,无法接收到数据。这个参数其实设置的是CAN_FMR_CAN2SB(参考《RM...原创 2020-05-13 17:50:28 · 3169 阅读 · 0 评论 -
MCU_STM32CUBEMX v5.5.0的一个BUG:ethernetif_input引起进入HardFault_Handler
STM32CUBEMX v5.5.0 配置FreeRTOS + LWIP,在MX_LWIP_Init()中的倒数第二句,osThreadNew(ethernetif_input, &link_arg, &attributes);这里是错误的,link_arg显然不能是ethernetif_input的参数,正确的用法是osThreadNew(ethernetif_s...原创 2020-05-07 19:54:15 · 1060 阅读 · 0 评论 -
MCU_使用STM32CUBEMX配置STM32F107/407 RMII-ETHERNET要注意的细节:PHY Address和MCO时钟
下面这两个是配置时比较容易忽略的问题。这里以STM32F107为例讲解,原理都一样,配置时看参考手册和DATASHEET。PHY_ADDRESSPHY Address需要是由PHYAD0引脚决定的,拉高就配置1,拉低/浮空就配置0,与具体的器件有关。DP83848DP83848在手册中(5.4.4 PHY Address)有描述到,PHYAD[0]内部有一个默认的上拉电阻,PHYA...原创 2020-05-07 09:49:28 · 7002 阅读 · 3 评论 -
MCU_STM32的HAL库中的宏DMA_FLAG_TCIF0_4/DMA_FLAG_TCIF1_5/DMA_FLAG_TCIF2_6/DMA_FLAG_TCIF3_7
宏定义的含义造成中文手册误解的原因:有的把stream翻译成中文“通道”,这里我还是直接使用英文比较好;因为表中还有一个单词"channel",这个单词在中文里更容易被翻译成“通道”,但事实上这里只涉及stream。当然,如果你手册看得比较细,就可以发现,标志位里面明确地提到了stream,而不是channel,如下所示所以,总的说来,DMA_FLAG_TCIF0_4就是指DM...原创 2020-05-02 15:45:58 · 8206 阅读 · 3 评论 -
MCU_通过windows串口API控制RTS和DTR
用FLYMCU-ISP进行固件烧录的教程比较多,一直比较好奇,RTS和DTR这两个引脚是如何通过软件完成的。今天查了一下,做个备注吧!问题MCUISP是怎样判断并控制RTS和DTR输出的?比如下面这个,OPENEDV上讨论得比较多的电路(以下图片均来自OpenEDV【1】),回答事实上这个问题很简单,通过Windows串口API即可实现,我直接把该函数列到下面【2】,...原创 2020-04-21 11:25:57 · 3115 阅读 · 0 评论 -
MCU_关于STM32Fxxx中断EXTI产生时多次(两次)进入中断的原因
调试新的芯片Stm32F407时,发现和以前的不一样。相同的代码,EXTI中断总是会进入两次,为了验证,我手动在中断中进行了清除,void EXTI0_IRQHandler(void){ /* USER CODE BEGIN EXTI0_IRQn 0 */ /* USER CODE END EXTI0_IRQn 0 */ HAL_NVIC_ClearPendi...原创 2020-04-12 13:19:18 · 5469 阅读 · 5 评论 -
步进电机的细分驱动中1-2相, W1-2相, 2W1-2相, 4W1-2相 表示什么意思?
今天碰到一个很古老的问题:步进电机的1-2相, W1-2相, 2W1-2相, 4W1-2相 表示什么意思?有意思的是,很多年前没看步进电机驱动器的说明书了,自己也完全不记得了,那时候也没有写博客的习惯。百度了一下,心凉凉的,发现一个合理的解释也没找到。结合自己的经历,用英文再搜索了一下,找到了些线索,大概知道这个代表啥意思了,记录一下,助人助己嘛。先说结果W是指电机的相,英文单词W...原创 2020-04-01 22:14:38 · 10778 阅读 · 2 评论 -
STM32F4xx usb库源码详解:HAL_PCDEx_SetRxFiFo 和 HAL_PCDEx_SetTxFiFo
HAL_PCDEx_SetRxFiFo 和 HAL_PCDEx_SetTxFiFo这两个函数的作用是:该EndPoint数据传输最大数量的限定除前面贴子里廛的影响数据传输量的函数外,这两个HAL_PCDEx_SetRxFiFo / HAL_PCDEx_SetTxFiFo函数也值得注意。其一,这两个函数是有使用顺序的(参考USBD_LL_Init函数):HAL_PCDEx_SetRxFi...原创 2020-01-19 10:24:31 · 3158 阅读 · 0 评论 -
STM32F4xx usb库源码详解 custom HID
STM32F407 USB 库源码详解(custom HID)首先我列出几个非常棒的参考文档:Keil USB documentationhttp://www.keil.com/pack/doc/mw/USB/html/index.htmlUSB_in_a_Nutshellhttps://www.beyondlogic.org/usbnutshell/usb1.shtmlUSB基础知识...原创 2020-01-18 21:13:29 · 9508 阅读 · 3 评论 -
MCU_Wireshark USB 抓包过滤(抓特定端口地址)
启动WiresharkUSB抓包的过程如下,这里点击“开始”就可以进入抓包界面了。不过,Wireshark启动USB抓包之后,会把同一总线的所有USB包抓下来,这个默认的设置对我们来说实在受不了,因为大多的包都是与我们分析无关的无效包。这时我们希望只抓我们需要的那个地址就好了,如何找到这个地址呢?方法如下,此时,所有和这个地址(这里是20)相关的包就都抓取出来了...原创 2020-01-16 21:05:45 · 3281 阅读 · 2 评论 -
MCU_WireShark USB抓包内容解析
WireShark是个非常不错的工具,现在的版本已经集成了测试USB抓包的工具USBPcap,该工具官网在,https://desowin.org/usbpcap/抓包的格式在这里有说明https://desowin.org/usbpcap/captureformat.html具体内容我附在后面,方便查找。重点要注意的是,USBPcap pseudoheader(伪头)不属于发...原创 2020-01-16 12:20:25 · 5184 阅读 · 0 评论 -
MCU_如何通过硬件VID 查找生产厂家
在操作系统中写驱动程序,时常碰到VID/PID等信息,VID往往就是硬件的生产厂家,那么我们一般如何知道这些代码代表哪些厂家呢?例如,硬件属性显示USB\VID_0483,那么在这里搜索https://devicehunt.com/可得到下面的页面https://devicehunt.com/search/type/usb/vendor/0483/device/any...原创 2020-01-16 11:37:41 · 3331 阅读 · 0 评论 -
UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, FLOAT, DOUBLE
UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64固定长度的整型,包括有符号整型或无符号整型。整型范围¶Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-922337203685477580...原创 2019-12-25 13:40:43 · 41273 阅读 · 0 评论 -
MCU_STM32的位带操作 -- bit banding
位带操作STM32芯片除了通用的寄存器访问,还有一个比较有意思的位带操作。这个位带的意思,就是每个比特(bit)位膨胀成一个32位的字(word),当访问这些字的时候就达到了访问“位”的目的,这就是位带操作!位带操作一个典型的特点,就是把1个位映射到32位,在程序处理中方便操作具体位,典型的如RCC寄存器,需要逐位操作的地方比较多,直接寄存器操作的话,程序的可读性不强;位带操作的缺...原创 2019-12-08 16:48:55 · 1030 阅读 · 0 评论 -
MCU_STM32F4XX 的中断优先级(和STM32F1XX相同)
在单片机中,STM32系列对中断优先级的管理算是相对比较容易的,优先级的数量也相对较少。STM32F40X的中断优先级和STM32F10X的设置是完全一样的,具体情况STM32F10X可参考ST官网的编程手册PM0056, STM32F40X可参考PM0214,其中SCB->AIRCR的PRIGROUP配置表是这样的,这里的Group priority就是我们通常说的抢占优...原创 2019-12-08 11:37:36 · 766 阅读 · 0 评论 -
MCU_单片机开发几个常用的IDE
Gnu Arm Eclipse:免费开源的,各种单片机,嵌入式的大合体开发环境,eclipse插件嘛,你懂的,就是配置麻烦了点。CoIDE: CooCox的作品,本人表示没用过EMBitz: 本人常用,目前1.1版本,2.0版叫唤了好久,还没出来Keil MDK: 这个不解释了吧,基本上是入门从这开始的那款收费的且容易和谐的软件 。IAR Embedded Workbench:...原创 2019-12-04 09:45:04 · 3973 阅读 · 0 评论 -
MCU_ARM-CORTEX-M0中断优先级设置及NVIC_SetPriority解读
参考资料参考:《Cortex-M0+ Devices Generic User Guide》http://www.keil.com/dd/docs/datashts/arm/cortex_m0p/r0p0/dui0662a_cortex_m0p_r0p0_dgug.pdfhttp://infocenter.arm.com/help/topic/com.arm.doc.dui0497a/...原创 2019-12-02 10:20:41 · 11315 阅读 · 1 评论