![]() |
+ 低压差线性稳压器 |
+ 白光LED驱动 |
+ MOSFET |
+ 32位ARM核Cortex系列 |
+ CMOS逻辑电路 |
I2C总线是由PHILIPS公司开发的一种简单、「双向二线制同步串行总线c的使用,并不陌生,STM32、C51、ARM、MSP430等,都基本集成硬件i2c,或者不集成i2c的,可以根据总线时序图使用普通IO口翻转模拟一根i2c总线。 模拟i2c的源码比较多,大多都是大同小异,对于各类例程,提供的模拟i2c似乎都不是太规范(个人见解),特别是一根i2c总线挂多个外设、模拟多根i2c总线c外设时,都需要大幅度修改源码、复制源码、重新调试时序等重复的工作。 在阅读过Linux设备驱动框架和RT-Thread的驱动框架,发现在总线分层上处理就特别好,完美解决了上述提及的问题。参考RT-Thread和Linux下的模拟i2c,整理修改在裸机上使用。 3) 底层(与硬件相关)与上层分离,方便添加总线及移植到不同处理器,移植到其他处理器,只需重新实现硬件相关的“寄存器”层即可; “i2c_bus_xfer”为i2c封装对外的API,函数原型如下,提供一个函数模型,具体需要实例化函数指针。 a)此函数即作为驱动外设的对外接口,所有操作通过此函数接口,与底层总线实现分离,如EEPROM、RTC、温度传感器等; 该结构体为关键,调用API驱动外设时,首先对此初始化(类似于Linux/RT-Thread注册设备)。完整的设备包括两部分,数据操作函数和i2c相关信息(如硬件i2c或者模拟i2c)。因此“struct i2c_dev_device”的原型为: b)第二个参数是一个void指针,初始化时指向我们使用的物理i2c(硬件/模拟),使用时可强制转换为对应的类型。 该函数与i2c总线c_bus_xfer”具有相同的参数,形参参数参考此项的第2点,初始化时实例化指向实体函数。 “struct i2c_dev_message”为i2c总线访问外设的一帧数据信息,包括发送数据、外设从地址、访问标识等。原型如下: 对于模拟i2c,在以往的实现方式中,基本是时序图和外设代码混合在一起,增加外设或者使用新的i2c外设时,需要对模拟i2c代码进行较大工作量的修改,或者以“复制”的方式实现一套新的i2c总线。 但同理,可以把模拟i2c时序部分代码抽象出来,以“复用”代码的形式实现。此部分实现源码为:i2c_bitops.c i2c_bitops.h 根据上述封装的对外API,使用时,首先需要实现入口参数“i2c_dev”实例化,用模拟i2c即是调用模拟i2c相关接口。 a)模拟一根i2c总线时,对外的操作函数都通过上诉函数;i2c信息帧相关参数由上层调用传递进入,此处主要增加“struct ops_i2c_dev”的封装; b)该函数使用到的函,其中入口参数为“struct ops_i2c_dev”类型的都是模拟i2c相关; 等等,入口参数都是i2c_bus,时序实现与常规裸机程序设计是一致的,不同的是函数指针的分离调用,具体看附件源码。 在以往的模拟i2c或者硬件i2c中,操作外设时都有各类情况,如读和写方向的切换、连续操作(不需启动i2c总线,如写EEPROM,先写地址再写数据)等。对于这类情况,我们处理办法是选择相关的宏标识即可,具体实现由“中间层”实现,让i2c外设驱动起来更简单!以上述对外函数为例: 读写函数最终是通过io口1bit的翻转模拟出时序,从而获得数据,这部分与常规模拟i2c一致,通过函数指针方式操作。主要实现接口函数: 除了“delayus”函数外,其余为io翻转,以“set_sda”和“delayus”为例,实现如下: b)i2c设备实例化,其中“ops_i2c1_dev”和“i2c1_dev”即是我们定义的总线设备,后面使用该总线_dev”实现对底层的调用。 上面总线c外设可以说就是信手拈来的事情了,而且模拟i2c总线抽象出来后,不需在做重复调试时序的工作。 串口以DMA方式发送数据丢失字节的问题 / 兴致勃勃地把复位及时钟控制(RCC)的寄存器定义写完了,没得午觉睡倒算了,还累得满头大汗 看来这事有点吃力不讨好,真想用别人现成的头文件算了,最后还是咬咬牙自己写吧,至少可以让自己对寄存器结构熟悉一些。 傍晚回来再写个测试程序,满以为一次就OK的,可是调试时却发现,运行到选择PLL时钟后程序就跑飞 顿时就傻眼了 检查各个寄存器配置,似乎没什么问题啊:选择外部8M时钟,不分频输入到PLL,设置PLL为9倍频(注意实际写入到寄存器中为7),AHB、ABP2不分频,ABP1为2分频(注意设置为8才是2分频),都没有超过最大频率啊。看来想要搞个72M的主频遇到麻烦了 试着将倍频降下来,当主频为48M时,系统可以正常工作了,莫 2019年4月26至27日,一年一度的意法半导体STM32峰会在深圳如期举行,根据最终统计,实际参会人数达到了3,500人,在线万人。 正是因为STM32在中国大获成功,因此此次峰会也得到了ST公司的重视。意法半导体总裁兼首席执行官Jean-Marc Chery是在刚刚开完季度投资者峰会后直接从欧洲赶赴深圳,同时前来的还有意法半导体数字、模拟、销售等全球或亚太区部门总监,不光是意法半导体在中国所召开的最的峰会,同时也是MCU界的盛会。 ST CEO在大会上发言 在此次峰会的主题演讲中,不光有来自意法半导体的高层分别介绍公司的愿景、单片机及传感器相关的产品规划,更重要的是邀请到了阿里巴巴集团副总裁、阿里 的DNA / 编写语言:C++ 编写平台:VS 运用平台:STM32和PC 非常实用的一个解析程序,自己编写的也简单。 *.h #define BUF_LEN 1024 //buf长度 #define CONF_BUF_LEN 128 //保存代解析数据 #define DATA_BUF_LEN 100 //保存解析数据 //此处为最大传输数据 #define CONF_BUF_BEST_LEN 4 //基本数据长度 /*/////////////////协议定义////////////////////// // 0x6B 0x66 长度 数据 校验(长度+数据的和) //最基本的数据 0x6B 0x66 0x 第一天 手上有啥资源可利用的? 1.一块MPU6050 2.一块stm32f103rc最小系统版,上面移植了ucos3,跑了几个任务,包括一个LCD任务(优先级最低) 3.st的固件库 4.ALIENTEK的MPU6050例程 5.stm32各种数据手册文档,ucos各种资料 好,开工。 先阅读stm32数据手册了解研究I2C模块原理架构,懵懵懂懂,若有所知的样子,行了不看了。 然后看看ALIENTEK的MPU6050例程。咦?怎么是用软件模拟I2C?stm32集成了I2C都不用,这么浪费,不看了。。。还是再看一下,看看MPU6050大致是怎么操作的。大概就是有个设备地址0x68,有很多寄存器,数据通信通的就是寄 从入坑到出坑 / 环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 源代码: 配置: //---------------------串口功能配置--------------------- //打开串口对应的外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE); //启动DMA时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //DMA发送中断设置 NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; NVIC_ 本程序实现的功能:将GPIO.13端口设置成下降沿触发中断,当中断事件发生后,与GPIOD.8相连的LED变亮。 步骤: ① 配置要使用到的端口的时钟,输入输出以及端口的第二功能(这里的第二功能是指把端口配置成EXTI口) void GPIO_Configuration(void) { /* Configure PC13 as input floating (EXTI Line13) */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = G 经历过产品量产的同学应该都知道,芯片一般会在出厂时开启读保护:要么在代码中加入,要么在烧录程序后人工通过软件开启该功能,比如 STM32 ST-LINK Utility: 当然也可以使用该工具关闭读保护功能。 为了保证程序不被读取,大多数产品应该会直接在量产代码中加入该功能,但这样会导致一个麻烦的问题:无法正常调试。 每次下载后,如果代码出现问题,都需要在线调试,而你的代码为了不忘记,默认就是开启读保护功能的,所以每次下载后,如果发现问题,你可能要找一个工具,如 J-Flash 或者上面的软件负责关闭读保护,让我们的开发效率降低不少。 是否有更好的方法解除读保护呢? 今天给大家介绍一种使用 MDK 解除读保护的方法,毕竟 MD 【线日,基于Buildroot制作STM32MP13启动镜像-深圳/厦门/西安/郑州/苏州 【新品】 STM32H7R/S基于Cortex-M7,运行频率高达600 MHz,板载闪存型MCU 拥有高速的外部存储 【新品】STM32WBA54/55 支持BLE5.4、IEEE 802.15.4通信协议、Zigbee®、Thread和Matter协议 【新品】STM32MP2 最高配备双核Arm® Cortex®-A35和Cortex®-M33的STM32MP2系列微处理器 【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性 12 1 概述实时时钟RealTimeClock(简称RTC。 江南官方体育app 上一篇:ARM主板EMB-2582支持数 下一篇:edge armv7浏览器手机版 |