自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

猿来这样-谢厂节的博客

编程入门知识

  • 博客(1231)
  • 资源 (11)
  • 收藏
  • 关注

原创 STM32 HAL库开发学习6. GPIO三种输出方式

开漏输出(Open-Drain)**两种基础模式,以及它们的复用功能模式(如复用推挽、复用开漏)。当GPIO用于外设功能(如UART、SPI)时,需配置为**复用推挽(AF_PP)在STM32中,GPIO的输出模式主要分为**推挽输出(Push-Pull)复用开漏(AF_OD)**模式。

2025-03-04 19:23:38 530

原创 STM32 HAL库开发学习5. 系统滴答定时器

滴答定时器是Cortext-M内核的一个简单定时器。滴答定时器是一个24位的递减计数器,主要用于为嵌入式系统提供基本的定时功能,也为实时操作系统RTOS提供系统节拍。

2024-12-02 18:00:00 1975 2

原创 STM32 HAL库开发学习4.SystemInit函数浅析及时钟配置

或者,也可以借助HAL库提供的更为灵活的时钟配置函数,如HAL_RCC_ClockConfig等,来实现定制化的时钟设置目标。在上述代码中,通过调用相关函数对HSI进行初始化,并将系统时钟输出到PA8引脚,开发人员可以借助示波器等工具查看PA8引脚的波形,从而直观地了解系统时钟的输出情况。MCO引脚可以将内部的时钟信号输出到外部,方便进行时钟信号的监测。在STM32系列中,可供选择的时钟源包括内部高速时钟(HSI)、外部高速时钟(HSE)、内部低速时钟(LSI)以及外部低速时钟(LSE)。

2024-12-01 18:00:00 971

原创 STM32 HAL库开发学习3.STM32启动浅析

这是通过芯片内部的硬连线和一些基本的逻辑电路来实现的,这些电路会根据启动模式引脚(BOOT0 和 BOOT1)的状态来确定初始的地址映射关系。然后,内核从0x0000 0004处取出程序计数器PC的初始值,该初始值指向的是复位向量所对应的复位处理程序的入口地址(名称为Reset_Handler),这一步明确了程序即将开始执行的具体起始点,使得处理器能够准确地跳转到复位处理程序中,进而开启一系列诸如初始化系统时钟、配置外设、设置中断相关参数等系统初始化操作。每一项是一个函数名,(函数名就是函数的地址)。

2024-11-30 18:00:00 1887

原创 STM32 HAL库开发学习2.MAP文件浅析

例如,在一个嵌入式系统项目中,.elf 或.axf 文件可以被下载到目标设备(如 ARM 微控制器)的内存中运行。在 MDK 编译过程中,当链接器将各个目标文件(.obj 或.o)和库文件链接成最终的可执行文件(.elf 或.axf)时,会同时生成.map 文件。这些目标文件里包含了源文件中函数和变量的定义(除了外部引用的部分),是链接过程的重要输入。这里的 main.o(.text.main) , 表示 main函数位于 text 段(通常是程序代码,用于存放可执行的机器指令)。

2024-11-29 19:45:00 921

原创 STM32 HAL库开发学习1.STM32CubeMX 新建工程

点击 Help-Updater Settings …

2024-11-29 06:30:00 611

原创 I.MX6U 裸机开发21. LCD原理及eLCDIF接口介绍

配置 CSCDR2[LCDIF1_PRE_CLK_SEL],bit[17:15],值为2,表示选择 LCDIF_CLK_ROOT 为时钟源;在初始化的时候,先读取ID来识别屏幕。继续设置 CCM_CSCDR[LCDIF1_CLK_SEL],bit[9:11],值为0,表示LCDIF的最终时钟源来源于 pre-muxed LCDIF clock。配置 CBCMR[LCDIF1_PODF],bit[25:23] 为LCDIF_PODF,设置第二级分频,可以设置0~7,表示1 ~ 8分频。

2024-11-27 10:14:13 843

原创 I.MX6U 裸机开发20. DDR3 内存知识

SRAM(Static Random - Access Memory)即静态随机存取存储器,是一种半导体存储器。SRAM 存储单元通常由 6 个晶体管组成(CMOS 工艺)。这种结构可以在不进行刷新操作的情况下保持数据的存储状态,容量小、价格高、速度快。在传统的51单片机、STM32中,会有芯片内部RAM,即SRAM。在高级一点单片机,可以使用外扩RAM。以 IS62WV51216 SRAM为例,这是一个1M Byte存储器,从数据手册可以看到其功能框图:A0-A18:19根地址线。

2024-11-25 14:38:49 1102

原创 I.MX6U 裸机开发19.串口通讯实验和printf scanf 重定向

在《IMX6U参考手册》P3561UART(Universal Asynchronous Receiver/Trasmitter),通用异步串行收发器。它可以通过电平转换器和 RS - 232 电缆或外部电路提供与外部设备的串行通信能力。外部电路可以将红外信号转换为电信号(用于接收),或将电信号转换为驱动红外 LED 的信号(用于传输),以提供低速 IrDA 兼容性。NRZ(非归零)编码格式RS485 兼容的 9 位数据格式IrDA 兼容的红外低速数据率(SIR)格式。

2024-11-22 16:04:46 941

原创 I.MX6U 裸机开发18.GPT定时器实现高精度延时

GPT 有一个 32 位的向上计数器。定时器的计数值可以通过外部引脚上的事件被捕获到一个寄存器中。捕获触发可以被编程为上升沿和/或下降沿。GPT 还可以在输出比较引脚上生成一个事件,并在定时器达到编程值时产生一个中断。GPT 有一个 12 位的预分频器,它从多个时钟源中提供一个可编程的时钟频率。32位向下计数器没有捕获功能。

2024-11-21 14:37:51 1324

原创 I.MX6U 裸机开发17.定时器按键消抖

如果按键电平与之前检测到的变化后的电平一致,说明按键已经稳定,此时可以认为是一次有效的按键动作,执行相应的按键处理程序,比如执行某个功能函数。但这种方式并不适合在真正项目中使用,因为中断中不可以让CPU执行无意义的耗时操作,导致占用了CPU,CPU没办法执行其它更重要的任务。如果在中断服务程序中读取到按键电平与之前变化后的电平不一致,说明在定时期间按键又发生了抖动,此时就不进行按键处理,并且重新启动定时器计数,等待下一次稳定的按键电平。在定时器计数期间,如果按键电平再次发生变化,就重新启动定时器计数。

2024-11-21 11:26:25 414

原创 I.MX6U 裸机开发16.EPIT定时器

若要直接初始化计数器而不是等待计数达到零,需设置 EPIT 计数器覆写使能位(EPIT_CR [IOVW]),并使用所需的初始化值写入 EPIT_LR。当 EPIT_EPITCMPR 值与 EPIT_EPITCNR 中的值相匹配时,会设置一个比较状态标志 , 如果控制寄存器中的OCIEN 位被置位,还会产生一个中断。要直接初始化计数器,也需要设置 EPIT 计数器覆盖使能位(EPIO_EPITCL [IOVW] ),并将所需要的初始化值写入 EPIT_LR。如果分频值是1,则1秒进中断 66M次。

2024-11-20 14:23:05 587

原创 I.MX6U 裸机开发15.IRQ中断——GPIO中断处理

*** @brief 中断触发类型枚举*/kGPIO_NoIntmode = 0U, // 无中断kGPIO_IntLowLevel = 1U, // 低电平触发kGPIO_IntHighLevel = 2U, // 高电平触发kGPIO_IntRisingEdge = 3U, // 上升沿触发kGPIO_IntFallingEdge = 4U, // 下降沿触发kGPIO_IntRisingOrFallingEdge = 5U, // 上升沿或下降沿触发。

2024-11-19 16:28:48 1263

原创 I.MX6U 裸机开发14.IRQ中断服务函数

push 指令可以一次性将多个寄存器的值压入堆栈,这是因为 ARM 处理器支持多寄存器操作指令,这些指令可以同时对多个寄存器进行操作,从而提高效率。当正在执行 0x2000时,PC里保存的是0x2008地址,如果这时发生了中断,LR保存的是0x2008。指令将 LR 寄存器的值减去 4,并将结果赋值给 PC(程序计数器)寄存器,从而实现从中断处理程序返回到中断发生时的指令地址。保存的是 GIC的CPU接口端基地址,这个位置保存的是 GIC_EDIR寄存器。IRQ中断模式主要用于处理中断。

2024-11-19 14:41:10 1004

原创 I.MX6U 裸机开发13.中断、中断向量表、中断函数

I.MX6ULL的中断系统介绍、中断向量表概念及中断的编写方法。

2024-11-16 18:46:53 1078

原创 I.MX6U 裸机开发12.主频修改和PLL配置

AHB_CLK_ROOT是AHB总线的主时钟源。AHB总线用于连接处理器、内存和外设等模块,提供高性能的总线通信。AHB_CLK_ROOT的频率直接影响系统的性能和功耗。通过《IMX6ULL参考手册》P643的表格:可以看到AHB_CLK_ROOT的默认频率是6MHz,最大132MHz。

2024-11-16 15:52:13 1035

原创 I.MX6U 裸机开发11.主频和时钟配置实验

在 I.MX6ULL 处理器中,PLL(锁相环)用于生成各种频率的时钟信号,以满足不同模块的需求。

2024-11-15 16:17:04 1050

原创 I.MX6U 裸机开发10.GPIO按键实验

据教程描述,问题现象是编译后烧录的程序无法正常工作,检查 beep.dis,发现 _bss_start 段的地址不是四字节 对齐的。Pull / Keep Enable Field(拉/保持使能字段)用于设置引脚的拉/保持功能。Pull / Keep Select Field(拉/保持选择字段)用于设置引脚的拉/保持功能。, 这句的意思是在这里加定位计数器,. 是四字节对齐的,再把点赋值给__bss_start。默认情况下,KEY0 为高,当按下KEY0 时, UART1_CTS 拉为低。

2024-11-15 09:43:51 874

原创 I.MX6U 裸机开发9.BEEP蜂鸣器实验

这里可以看到 , BEEP 接的引脚是SNVS_TAMPER1 引脚,该引脚通常用于安全非易失性存储器(SNVS)模块中的防篡改检测功能,本实验将其设置复用为GPIO口。从前一章08_ledc_bsp的基础上开发,复制前一章所有文件到新文件夹: 09_beep。可以看到 SNVS_TAMPER1 可以复用为GPIO5_IO01。开发板上的蜂鸣器是有源蜂鸣器,内部有振荡源,通电即可发声。当BEEP为低的时候,三级管导通,蜂鸣器会叫。当BEEP为高的时候,三级管截止,蜂鸣器不叫。编译烧写程序运行即可。

2024-11-14 15:53:59 405

原创 I.MX6U 裸机开发8.BSP工程管理实践

前面的章节源文件直接放在根目录下,不利于大型项目的文件组织。BSP(Board Support Package)是一种比较常见的工程管理模式,最早由 嵌入式系统软件公司 Wind River Systems 提出。BSP 是其 VxWorks 实时操作系统的一部分,用于支持特定硬件平台的初始化和配置。BSP(Board Support Package)工程管理涉及到为特定硬件平台(如开发板)提供必要的软件支持,以便操作系统和应用程序能够正常运行。启动代码:初始化硬件,设置堆栈,跳转到主程序。设备驱动。

2024-11-13 14:36:55 1026

原创 I.MX6U 裸机开发7. NXP官方SDK部分寄存器定义移植

在正点原子给的资料包 《【正点原子】阿尔法Linux开发板(A盘)-基础资料》找到:07、I.MX6U参考资料\03、I.MX6ULL SDK包,下面有两个文件,分别是Linux和Windows下的SDK包。主要用于配置 I.MX6U 处理器的 IOMUXC(输入/输出复用控制器),包含了 IOMUXC 寄存器的定义和相关的宏,用于设置引脚的复用功能和电气属性。是 NXP 提供的 I.MX6U 处理器的头文件,包含了对处理器寄存器、外设的定义(如 GPIO、UART、I2C、SPI 等)和控制宏。

2024-11-13 12:43:02 922

原创 I.MX6U 裸机开发6. 结构体编程风格使用寄存器

通过 《IMX6ULL参考手册》 P 658,可以看到相关结构体的地址:/* GPIO寄存器结构体定义 */} CCM_Type;类似的对IOMUX_SW_MUX 、CCM_ANALOG、 IOMUX_SW_PAD进行定义,完整文件参考正点原子教程代码。

2024-11-12 14:17:52 808

原创 I.MX6U 裸机开发5.准备C环境并用C语言控制LED

I.MX6U裸机开发准备C语言环境,并使用C语言控制 LED,知识点有准备C环境 、SP指针 、CPSR寄存器、启动文件编写、链接文件编写。

2024-11-09 20:07:16 882

原创 I.MX6U 裸机开发4.IMX启动方式

SEC_CONFIG 的出厂设置为开放配置,在这种配置中,ROM/HAB 执行镜像认证,但所有认证错误都会被忽略,镜像仍然被允许执行。DCD(设备配置数据)是一种包含在程序镜像中的配置信息(位于ROM外部),ROM会解释这些信息以配置芯片上的各种外设。通过上述代码,可以将 ROM 中的异常向量表映射到 RAM 中的重复异常向量表,从而在启动后可以根据需要覆盖这些向量。IVT 包含了启动所需的各种数据组件,包括程序镜像入口点、设备配置数据(DCD)的指针以及启动过程中 ROM 使用的其他指针。

2024-11-08 15:09:17 1070

原创 I.MX6U 裸机开发3. GPIO操作控制LED灯

I.MX6U的时钟寄存器,首先到IMX6ULL参考手册找到 CCGR0~CCGR6地址,通过设置为0xFFFFFFFF把时钟全部使能。本系列博文,链接地址使用了0x87800000,这是以后要学到的Uboot的链接地址就是0x87800000,这里沿用其设置。这里我们要添加一个头部,在这个头部实现 从指定存储中读取头部、初始化DDR,并将bin拷贝到指定地方。I.MX6U 支持 SD卡、EMMC、NAND、NOR、SPI Flash,本例程使用烧写到SD卡。这一步不是为了烧写,而是为了方便以后调试代码。

2024-11-07 19:17:43 922

原创 I.MX6U 裸机开发2. 芯片简介、汇编基础及GPIO操作准备工作

官网地址:点击:根据其官网介绍:i.MX 6ULL 是一个高能效且成本优化的应用处理器系列,采用单个 Arm Cortex-A7 内核的高级实现,运行速度高达 900 MHz。i.MX 6ULL 应用处理器包括一个集成的电源管理模块,可降低外部电源的复杂性并简化电源排序。

2024-11-03 19:07:40 1138

原创 I.MX6U 裸机开发1. 开发环境搭建

开发环境搭建;汇编驱动开发;驱动开发;本系列文章学习过程代码开源地址: https://gitee.com/xundh/learn_i.mx6u学习资源主要来源于正点原子官方教程。EMMC核心板: 容量大、速度快,8GB EMC,DDR:512M字节。NANO FLASH:工业级,512M字节 FLASH,DDR:256M字节。

2024-11-01 13:26:54 614

原创 常见算法——自相关的含义及Python、C实现

方法是计算水位数据的局部标准差,如果局部标准差过小,说明数据可能是常值或变化不大,从而跳过自相关计算。例如,若我们怀疑数据有周期性波动(如正弦波),我们会尝试多个滞后期,看看在哪个滞后期的自相关值最大,进而推测数据的周期。如果水位是周期性变化的,那么当前时刻的水位值与前几个时刻的水位值会有某种关联,这种关联就可以通过自相关来捕捉。在常见的分析中,滞后期可能从 1 开始增加,直到找到显著的自相关值或达到数据长度的一半。在计算自相关时,通常需要减去数据的均值,来去除掉整体趋势的影响,关注数据的波动。

2024-09-16 17:40:18 1634

原创 STM32学习14 ADC模数转换

本文使用芯片是 STM32F103ZET6 进行ADC模数转换的实验。

2024-04-24 14:24:19 1221

原创 STM32 学习13 低功耗模式与唤醒

STM32微控制器提供了多种低功耗模式,以便在需要节能的应用场景中最大限度地减少功耗。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK为CPU提供时钟,并执行程序代码。当MCU不需要运行时,就可以利用低功耗模式来节省功耗。STM32有多种低功耗模式,用户可以根据电源消耗、启动速度、可唤醒资源来选择最佳的低功耗模式。

2024-04-23 16:36:19 3076

原创 中颖51芯片学习10. Touch Key触摸按键功能

SH79F9476内建触摸按键功能模块,最大能连接20个按键。SH79F9476内建触摸按键功能模块工作电路,应用时无需外接电容,即可实现触摸检测功能。硬件高抗干扰。灵活软件库,支持上电自校准功能,低开发难度。

2024-04-23 10:34:18 2066 1

原创 中颖51芯片学习9. PWM(12bit脉冲宽度调制)

前面介绍了使用 SH79F9476 的可编程计数器阵列 PCA0 生成PWM波,其支持8位、16位脉宽调制。两路12位PWM模块:SH79F9476提供了两个PWM模块,每个模块可以生成具有可调周期和占空比的脉宽调制波形。周期溢出中断:每个PWM周期都提供了溢出中断功能,可以在周期结束时触发中断处理程序。输出极性可选择:可以通过设置PWM控制寄存器来选择PWM输出的极性,从而决定占空比期间输出的电平。PWM模块控制。

2024-04-22 13:48:03 1474

原创 中颖51芯片学习7. printf重定向到串口与自定义日志输出函数

printf重定向是指将标准输出函数printf()的输出流重定向到用户定义的其他输出设备或存储介质,而不是默认的标准输出设备(通常是终端或控制台)。这样做可以将printf()函数输出的内容发送到不同的设备,比如串口、文件、LCD屏幕等,从而实现更灵活的输出方式。通过重写putchar函数可以简单地实现printf重定向 。 下面是一个示例:调用方法:main.c示例会通过uart0串口输出ascii码。标准的C语言格式化字符格式如下:数值的输出是%d,如:但是在C51中,对于单字节变量的格式化

2024-04-20 20:24:05 1959

原创 中颖51芯片学习8. ADC模数转换

ADC(Analog-to-Digital Converter)是一种将模拟信号转换为数字信号的电路或模块,以将来自外部传感器或其他模拟设备的模拟电压信号转换为处理器能处理的数字信号。ADC转换中,采样率SPS(Samples Per Second),即每秒样本数用来衡量采样的速度,它的单位通常用Hz表示, 即 1SPS=1Hz。分辨率:具有12位分辨率,能够将模拟信号转换为数字数据,并提供高精度的测量。参考电压:可选择使用外部VREF或芯片内部的VDD作为基准电压。模拟输入通道。

2024-04-19 15:29:16 1730

原创 中颖51芯片学习6. EUART接口通讯

SH79F9476 有3个自带波特率发生器的EUART0/1/2(波特率发生器是一个15位向上计数器)。SH79F9476的EUART有四种工作方式,3个EUART功能基本一样。下面主要介绍 EUART0。方式0。

2024-04-11 19:00:37 1044 1

原创 51单片机学习笔记17 4线双极性马达和SG90舵机

四线双极性电机通常用于驱动一些需要高效率和可靠性的应用。它的定子通常包含固定的线圈,而转子则是可以旋转的部分,通常是通过磁场与定子相互作用来产生转动力。TC1508S是一款双通道直流电机驱动集成电路,主要用于驱动中小型直流电机或四线双极性步进电机。这款芯片内置了功率MOSFET全桥驱动电路,可以方便地实现电机的正转、反转、停止以及刹车控制。我手头的步进电机额定电压要6-24V,TC1508S无法直接驱动。已网购 TMI8549 芯片,到手实验成功后补充驱动电路。

2024-04-11 15:23:31 1555

原创 中颖51芯片学习5. 类EEPROM操作

代码保护模式是一种微控制器提供的安全功能,旨在保护程序代码不受未经授权的访问和修改。中颖 SH79F9476 提供了四种代码保护模式,分别是代码保护模式0、代码保护模式1、代码保护模式2和代码保护模式3。Flash编程器在ICP模式设置相应的保护位,以进入所需的保护模式。SSP模式不支持代码保护控制模式编程。地址: F7H Bank0符号:XPAGE对于程序存储区,一个扇区为 512 字节。寄存器定义如下。

2024-04-10 15:58:05 1315 2

原创 51单片机学习笔记16 小型直流电机和五线四相电机控制

本文使用的小型直流电机常用于玩具,两根导线,改变电流强度时改变转速、改变电流方向时改变转向。

2024-04-10 11:48:18 1589

原创 中颖51芯片学习4. 可编程计数器阵列PCA0

PCA(Programmable Counter Array)是一种可编程计数器阵列,是常见于一些8位和16位微控制器中的重要外设之一,包括中颖C51单片机。PCA0的功能包括计时器和捕获/比较功能,它能够执行多种定时和控制任务。PCA可以作为一个多功能的定时器,能够产生精确的定时脉冲,用于计时、延时等应用。它可以以不同的时钟源(如系统时钟、外部时钟等)来进行计数,并且支持不同的计数模式(例如定时器、捕获/比较等)。

2024-04-09 15:00:50 1353

原创 中颖51芯片学习3. 定时器

SH79F9476芯片具有多个定时器模块,包括定时器/计数器、PWM(脉冲宽度调制)定时器等,定时器可以配置为在计时达到特定值时触发中断,以便处理紧急事件或执行特定的任务。T2端口可以编程输出50%的占空比时钟周期。清C/T2位和置T2OE位,使定时器2作为时钟发生器。TR2位启动和中止定时器。

2024-04-08 14:47:21 1364

adb驱动解决重启问题

adb.exe 新版本手机连接adb可能会出现反复重启的现象,该版本可以解决此问题。解压后把目录加入到path即可。

2018-06-28

sbt-launch

在windows下的启动包

2017-01-23

倒计时功能的PPT

具有倒计时功能的PPT

2016-11-24

Psycopy For win64

Python连接PostgreSQL时要安装的库。Windows 64Bit操作系统使用。

2016-07-26

tcpdump for android arm

适合android使用的tcpdump抓包工具,使用方法http://blog.youkuaiyun.com/xundh/article/details/46010707

2016-01-07

php redis驱动for win

php 下的 redis驱动,64/32bit windows,配合博客: http://blog.youkuaiyun.com/xundh/article/details/42437091#5752006

2015-12-29

C#操作JSON LitJSON

C#操作JSON LitJSON,适用Framework的版本比较广。操作方法简便。

2015-09-16

msnodelsql

nodejs使用sqlserver数据库的包

2015-09-16

mysql-connector-net-6.3.9.rar

mysql与c#的连接库6.4版本后可能有bug,连接数据库可能会提示:out of sync with server。这个老版本可以正常使用。

2015-06-13

Sqlite3+VB

非原创,感谢原作者。VB下使用Sqlite3,网上代码很多,但要筛选使用。这个测试可用。因为博客没法上传文件,所以上传在这里。

2015-02-06

使用html5实现的多边形展示百分比

使用html5实现的多边形展示数字百分比,以替换柱状图的展示方式。

2014-10-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除