
keil
keil
科技邻
这个作者很懒,什么都没留下…
展开
-
28-串口发送和接收实验
USB转串口--需要驱动总结:在stm32单片机编程中,以下方法对于单片机编程尤为重要1)掌握不同库函数的使用方法;2)弄清楚编程步骤。库函数实际上就是对寄存器进行了一系列的封装,其本质上都是对芯片的...原创 2022-04-25 10:53:47 · 1641 阅读 · 0 评论 -
27-串口函数初始化介绍
使用固件库编程进行初始化,有很多寄存器,每个寄存器有很多位。如何知道从哪里开始,要初始化那些位?1:找到相应的外设C文件----找到头文件----他的头文件里面有初始化结构体----在编程的时候只需要编辑这些成员就可以----成员配什么值,怎么配置,看里面的描述2*:串口时钟初始化在同步通信中配置,异步通信不需要。1)CPOL---时钟的极性,控制无信号时电平的表示方法2)CPHA---时钟的相位,控制在时钟的第一个变化沿或者第二个变化沿捕获数据3:在编程时重点操作这个结构体:原创 2022-04-24 10:04:37 · 2229 阅读 · 0 评论 -
26-串口功能框图
5:包含以下部分一:引脚6:引脚串口引脚:TX;RX;SW_RX(智能卡模式);nRTS;nCTS;(硬件流)SCLK(时钟)7:串口发送,把数据打包成帧;二:数据寄存器8:TDR发送数据寄存器---发送移位寄存器---TX标志位1:Transmit data register empty(发送数据寄存器为空)---把这个中断打开了(这个时候会产生中断 ) 标志位2:发送完成---相应的中断9:读数据只有一个标志位会发生变化...原创 2022-04-23 20:02:10 · 577 阅读 · 0 评论 -
24-通信的基本概念
串口;I2C;spi;Fsmc同步: 时钟线异步:不需要时钟线总结:1:串行通信;并行通信2:全双工;半双工;单工3:异步(校验);同步(多一根线)4:通信速率(波特率)(比特率)...原创 2022-04-19 17:01:05 · 208 阅读 · 0 评论 -
20-系统时钟配置函数
汇编语言,用分号注释__main,C库函数 ,HSE:外部时钟HSI:内部时钟,当HSE故障时使用PLLCLK锁相环:将低速时钟倍频成高速时钟原创 2022-04-17 12:29:23 · 326 阅读 · 0 评论 -
19-位带操作
1:以下地址有位带别名区 :0x400F FFFF----0x4000 0000别名区对应的地址在:0x43FF FFFF----0x4200 0000 下面同理APB1 APB2 AHB1总线上的外设 有操作寄存器对应的别名去地址;对地址操作:指针+adr(别名区地址)=0;实现位带操作:地址转换转换的过程中,一个位会膨胀位4个字节...原创 2022-04-16 18:55:50 · 117 阅读 · 0 评论 -
18-分析固件库文件目录和文件的作用
固件库就是函数的集合,固件是程序,1MFLASH,操作最底层设备。原创 2022-04-14 11:08:06 · 186 阅读 · 0 评论 -
17-从零写库函数3
1:首先构建结构体typedef struct{ uint32_t MODER;//moder在配置时,只有4种值,然而uint32_t可以表示2^32种数值 //为了防止配置结构体取值错误,这里对MODER的取值进行了限定 uint32_t PUPDR; uint32_t OTYPER; uint32_t OSPEEDR; }GPIO_InitTypeDef;2:在C语言中限制结构体成员的值,用enum这种结构体在enum中,用逗号隔开,最后一个不加逗号type原创 2022-04-13 21:21:35 · 162 阅读 · 0 评论 -
16-从零自己写库函数(2)外设结构体定义
如何写BSRR的置位----复位的库函数:1:在最初的时候需要先定义GPIO的结构体#ifndef _STM32F4XX_H#define _STM32F4XX_H#include <stdint.h>#define GPIOF_BASE ((unsigned int)0x40021400)#define RCC_BASE ((unsigned int)0x40023800) #define GPIOF_MODER *(unsigned int *)(GPIOF_BA原创 2022-04-13 11:11:57 · 230 阅读 · 0 评论 -
15-自己写库函数构建库函数雏形
寄存器编程---是如何过渡到固件库1:头文件#ifndef _STM32F4XX_H#define _STM32F4XX_H#include <stdint.h>#define GPIOF_BASE ((unsigned int)0x40021400)#define RCC_BASE ((unsigned int)0x40023800) #define GPIOF_MODER *(unsigned int *)(GPIOF_BASE+0x00)//把这个数加(unsi原创 2022-04-12 21:30:09 · 177 阅读 · 0 评论 -
14-寄存器点亮LED-从0开始写代码
1:main.c文件#include "stm32f4xx.h"void delay(unsigned int a){for( ;a>0;a--);}int main (void){ //第一步:开GPIOF端口时钟 RCC_AHB1ENR |=(1<<5); //第二部:配置GPIO为输出 GPIOF_MODE &=~(3<<(2*9)); GPIOF_MODE |=(1<<(2*9));//如果在配置时之前就已经配置过原创 2022-04-12 20:12:25 · 251 阅读 · 0 评论 -
13-GPIO功能框图
今天学习了GPIO的功能框图,总结一下stm32f407 GPIO的功能框图控制GPIO的寄存器有以下几种1:GPIOx_MODER:控制端口输入输出模式2:GPIOx_OTYPER:端口输出类型寄存器,输出开漏3:GPIOx_OSPEEDR4:GPIOx_PUPDR5:GPIOx_IDR6:GPIOx_ODR7:GPIOx_BSSR8:GPIOx_LCKR9:GPIOx_AFRL10:GPIOx_AFRHGPIOx_ODR寄存器,当使用该寄存器配置输出.原创 2022-04-12 15:40:41 · 3345 阅读 · 0 评论 -
13-寄存器编写程序入门
与51单片机对比,32单片机控制寄存器要复杂的多;在51单片机中,可以直接控制端口的高低电平;然而32单片机却不可以,因为32为了减小功耗,默认情况下这些时钟都是关闭的,需要打开才能使用;同时它的使用模式也有多种;只用在配置好端口之后才能进行控制。1:下面以stm32单片机为例:初步学习通过寄存器控制GPIO的方法:#include "stm32f4xx.h"int main (){ //有很多外设,默认情况下这些外设时钟都是关闭的 //降低功耗,有专门的外设控制,复位时钟控制 //A原创 2022-04-11 22:25:18 · 1469 阅读 · 1 评论 -
12-建立工程
1:空白文件夹--芯片型号--寄存器版不需要继续选择--建立.c文件--建立.h文件--添加.c.h的文件;2:选择chineseGB23123:字体大小选着4: 启动文件的作用5:Jlink的链接方法,设置方法原创 2022-04-11 21:50:03 · 73 阅读 · 0 评论 -
11-C语言对寄存器的封装
1:仅通过指针进行封装//在基地址基础上加上偏移地址#define GPIOF_BASE (0x40021400)#define GPIOF_BASE (0x40021400)#define GPIOF_BASE (0x40021400)#define GPIOF_BASE (0x40021400)#define GPIOF_BASE (0x40021400)#define GPIOF_BASE (0x40021400)#define GPIOF_MODER *(unsign.原创 2022-04-11 16:38:55 · 899 阅读 · 0 评论 -
10-寄存器映射
1:51单片机资源很少,然而32端口较多不适合j寄存器映射2:如何辨别方向:逆时针增长,小点到大点3:最多访问32G内核放在32GB—7个块4:寄存器映射对芯片里面的某个具有特殊功能的内存单元,取一个别名的过程。为了方便阅读采用寄存器的名字命名----寄存器映射//例如在51单片机中, sfr PA0=0x80;//关键字定义 PA0=1;//在32单片机中#define GPIOF_DDR *(unsigned int *) 0x40021414原创 2022-04-11 14:53:54 · 538 阅读 · 0 评论 -
9-转义字符-注释-函数-数组
转义字符串:转变了原来的意思整形%d 字符%c 字符串%s函数:特点简化代码,代码反复利用;函数类型+名称+函数访问的入口参数+函数内容+返回值数组:数组访问方法:每个元素有下标0---n;操作符:整数除小数结果依然是整数;小数除以小数结果位小数;操作符后面的括号可以省略;算数操作符+移位操作符+赋值操作符+单目操作符+关系操作符+逻辑操作符+条件操作符+......单目操作符:...原创 2022-04-10 09:13:14 · 216 阅读 · 0 评论