推荐阅读最新更新时间:2024-03-16 15:15
在Keil5中新建stm32寄存器工程
直接拿来用配置好的工程文档顺手了,自己又重头配置了一次,温故而知新。 在桌面上新建一个文件夹,我取名叫example 打开MDK5,新建工程 在example里面新建user文件夹,将工程命名保存在此文件夹内 弹出对话框,选择芯片型号 添加启动代码 ST 公司提供了 3 个启动文件给我们,分别用于不同容量的 STM32 芯片,这三个文件是: startup_stm32f10x_ld.s startup_stm32f10x_md.s startup_stm32f10x_hd.s 其中,ld.s 适用于小容量 产品;md.s 适用于中等容量产品;hd 适用于大容量产品; 这里的容量是指 FLASH 的大小.判断方法如下: 小
[单片机]
FDC2214的STM32和MSP430F5529串口读取数据程序
msp430单片机源程序如下: #include bsp.h int main( void ) { float cap,capfirst,capfirst1; unsigned int Data_FDC; // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; delay_ms(500); bsp_Init(); _EINT(); delay_ms(500); Data_FDC = ReadRegfdc2214(0x00);//读取第一通道的值 cap = 232021045.248/(Data_FDC); c
[单片机]
STM32 下的库函数和寄存器操作比较
以 led闪烁中的flashLed函数例子: 库函数操作简单,但是效率不如寄存器操作的高; 寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高 /**下面是通过直接操作库函数的方式实现IO控制**/ while(1) { GPIO_ResetBits(GPIOB,GPIO_Pin_9); //LED0对应引脚GPIOF.9拉低,亮 等同LED0=0; GPIO_SetBits(GPIOB,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉高,灭 等同LED1=1; delay_ms(500); //延时300ms GPIO_SetBits(GPIOB,GPIO_Pin_9);
[单片机]
通过J-FLASH方式烧写程序到STM32
1、首先安装JLINK驱动 驱动程序安装过程十分简单,和普通程序安装没有什么区别,如果大家没有这个驱动程序的话,可以到我的资源页下载(JLINKV8驱动) 2、安装完J-LINK驱动后,顺带也会装上了J-LINK的烧写工具,名字叫J-Flash 2.1、双击打开软件,首先新建工程 然后打开一个.hex文件 2.2、设置JLINK CPU选择101CB 下载速度选择4M,接口选JTAG 2.3、连接,正常的话会提示Connected successfully 2.4、烧写,直接点击Auto,刷除、烧写一次完成 2.5、将JLINK和CPU断开 Target-Disconnect 2.6
[单片机]
stm32低功耗实验之待机模式
一 待机模式简介 在stm32的低功耗模式中,待机模式可以实现系统的最低功耗,在这种模式下,只需要2uA左右的电流。 三 待机唤醒程序分析 实验现象: 将程序下载到开发板上后,LED灯会不断地亮灭,当按下KEY2键超过3s时,LED灯灭,标志着单片机进入待机模式,再按下KEY1键,这时唤醒单片机,LED又开始不断地亮灭亮灭。 程序中用到的一些宏定义 #define macEXTI_GPIO_CLK (RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO) #define macEXTI_GPIO_PORT
[单片机]
玩转STM32(14)运行第一行代码
前面学习了选择从那里进行加载代码,接着下来,我们将要了解CPU是怎么样运行编译的代码。通过前面的学习,我们知道通过编译器的编译,会生成可运行的代码,然后通过JLINK下载到STM32的FLASH里,再通过配置CPU的引导管脚,实现选择内部FLASH来加载代码。但是CPU是怎么样来加载代码,并运行的呢? 其实不同类型的CPU运行代码的方式不一样,STM32的运行方式是这样的,CPU 将从地址 0x0000 0000 获取栈顶值,然后从始于 0x0000 0004 的自举存储器开始执行代码。前面已经把0x800 0000的FLASH地址配置为启动的存储器,因此就会从这里偏移位置0取得栈顶值,从偏移位置4取得第一行执行代码。根据这个
[单片机]
STM32串口DMA连续发送两帧,导致数据部分覆盖的问题
问题描述 使用STM32的串口进行DMA发送(Noraml模式),在某个任务中连续调用两次发送函数log_printf(),但是发回的数据在串口调试助手上显示与预期不符。第一次发送的数据有一部分被第二次发送的数据覆盖,如图所示: 任务代码如下: /* Log_Task function */void Log_Task(void const * argument) { /* USER CODE BEGIN Log_Task */ /* Infinite loop */ for(;;) { if(router_rx_flag == 1) { router_rx_flag = 0; log_pri
[单片机]
同步串行扩展总线接口
1串行总线接口简介
众所周知,单片机与外围设备的通信方式可分为并行通信和串行通信,相应的通信总线被称为并行总线和串行总线。并行通信速度快,实时性好,但由于占用单片机的口线多(即使地址和数据线可部分复用),不适合作为小型化产品和分布式、远程测控系统的数据通信方式。串行通信只需一根和几根数据传输线(兼作地址、控制线),不仅大大降低硬件成本,也有利于系统的扩展设计,所以串行总线广泛应用于单片机测控中。目前串行总线除了使用通用异步串行接口(UART,如:RS-232C/449/423/422/485)以外,应用越来越多的是同步串行扩展总线接口,主要有单总线、I2C、SPI、USB、MPS、Microwire/PLUS等。越来越多的外围
[嵌入式]