STM32学习笔记小结
- 格式:pdf
- 大小:1.51 MB
- 文档页数:13
牛人的STM32学习笔记(寄存器版本)分析解析一、GPIO口的配置STM32的DGPIO口最多可以有7组(GPIOa~GPIOg),而每一组GPIO口均有16个双向IO组成。
并且没个IO口均可配置成8种模式(4种输入模式,4种输出模式)。
不管配置哪个IO口也不论将其配置成哪种模式(但是配置成哪种模式要看具体应用,参考《中文参考手册》第105页)都可以按以下步骤来进行配置:(1)使能PORTx(x=A~G)时钟这里就得操作寄存器RCC_APB2ENR(32为寄存器)了15 14 13 12 11 10 9 8 ADC3EN USART1EN TIM8EN SPI1EN TIM1EN ADC2EN ADC1EN IOPGEN7 6 5 4 3 2 1 0 IOPFEN IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN 保留AFIOENRCC_APB2ENR的0~15位(06~32位保留)第2~8分别是使能GPIOA~GPIOG时钟的,只要将其置“1”即可,如RCC_APB2ENR|=1<<2;就是使能GPIOA的时钟;其余IO口的始终使能一次类推。
(2)对相应的IO模式进行配置,低8位配置GPIOx_CRL;高8位配置GPIOx_CRH31 30 29 28 27 26 25 24CNF7[1:0] MODE7[1:0] CNF6[1:0] MODE6[1:0]23 22 21 20 19 18 17 16CNF5[1:0] MODE5[1:0] CNF4[1:0] MODE4[1:0]15 14 13 12 11 10 9 8CNF3[1:0] MODE3[1:0] CNF2[1:0] MODE2[1:0]7 6 5 4 3 2 1 0CNF1[1:0] MODE1[1:0] CNF0[1:0] MODE0[1:0]GPIOx_CRL(x=A~G(端口配置低寄存器x=A…E)该寄存器用于配置GPIOx的低8位,具体8种模式的配置见《中文参考手册》例如:GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL|=0X00000300;/PD.2推挽输出;其余IO口的低8位以此类推。
STM32学习笔记1、GPIO函数:输出:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//此例以PA12⼝为例HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); //此例以PA12⼝为例HAL_GPIO_ TogglePin(GPIOA,GPIO_PIN_12); //此例以PA12⼝为例2、串⼝函数:1、串⼝发送/接收函数HAL_UART_Transmit();串⼝轮询模式发送,使⽤超时管理机制HAL_UART_Receive();串⼝轮询模式接收,使⽤超时管理机制HAL_UART_Transmit_IT();串⼝中断模式发送HAL_UART_Receive_IT();串⼝中断模式接收HAL_UART_Transmit_DMA();串⼝DMA模式发送HAL_UART_Transmit_DMA();串⼝DMA模式接收2、串⼝中断函数HAL_UART_TxHalfCpltCallback();⼀半数据发送完成时调⽤HAL_UART_TxCpltCallback();数据完全发送完成后调⽤HAL_UART_RxHalfCpltCallback();⼀半数据接收完成时调⽤HAL_UART_RxCpltCallback();数据完全接受完成后调⽤HAL_UART_ErrorCallback();传输出现错误时调⽤例程:串⼝接收中断uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n";uint8_t aRxBuffer[20];2、在main函数中添加两个语句通过串⼝中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取⽬标长度HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10);3、在main.c⽂件后⾯添加中断接收完成函数,将接收到的数据⼜通过串⼝发送回去。
STM32学前班教程之四:打好基础建立模板1、新建目录Project_IAR4,按照自己的顺序重新组织dll(驱动);inc、src 函数库;settings,其他所有文件全部放这个新建的目录下。
2、双击打开Project.eww,继续更改内部设置。
3、需更改的内容列表:位置和项目目标说明Project\Edir confignations 新建基于STM3210B的配置编译目标和过程文件存放Project\Option\General Option\Target ST STM32F10x 选择芯片类型Project\Option\ C/C++ Compiler\Preprocessor\Additional include direct ories $PROJ_DIR$\$PROJ_DIR$\inc 头文件相对位置,需要包括“map/lib/type”的位置Project\Option\ C/C++ Compiler\Preprocessor\Defined symbols 空空白是在Flash里面调试程序,VECT_TAB_RAM是在RAM里调试程序Project\Option\ C/C++ Compiler\Optimizations\Size 最终编译一般选择High调试可选None None,Low,Medium,High是不同的代码优化等级Project\Option\ Linker\Output 去掉Overrride default 输出格式使用默认Project\Option\ Linker\Extra Output 打开General Extra Output去掉Overrride default 厂家要求Project\Option\ Linker\Config 打开Overrride default$PROJ_DIR$\lnkarm_flash.xcl 使用Flash调试程序,如果需要使用RAM调试则改为lnkarm_RAM.xclProject\Option\ Debugger\Setup\Driver Third-Party Driver 使用第三方驱动连接单片机Project\Option\ Debugger\ Download Use flash loader 下载到flash所需的设置Project\Option\ Debugger\ Third-Party Driver\ Third-Party Driver\IAR debugger driver $PROJ_DIR$\ddl\STM32Driver.dll 驱动文件路径注1:所有跟路径相关的设置需要根据实际情况编写,相对路径的编写——“$PROJ_DIR$”代表eww文件所在文件夹,“..”代表向上一层。
一、文档和库规范固件库命名规则(1)外设函数的命名以该外设的缩写加下划线为开头。
每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。
在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
(2)名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.(3)名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.(4)名为PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef 结构中的各种参数来定义外设的功能,例如:USART_StructInit(5)名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd.(6)名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:RCC_ITConfig. (7)名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig. 用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.(8)名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus. (9)名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag. (10)名为PPP_GetITStatus 的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus.(11)名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:I2C_ClearITPendingBit.编码规则变量布尔型在文件stm32f10x_type.h中,布尔形变量被定义如下:typedef enum {FALSE = 0,TRUE = !FALSE} bool;标志位状态类型在文件stm32f10x_type.h中,我们定义标志位类型(FlagStatus type)的2个可能值为“设置”与“重置”(SET or RESET)。
stm32相关笔记——ADC部分我们在学习⼀门技术的时候,应该对它的理论部分有所了解,然后才能在实践中进⼀步加深理解,进⽽掌握。
对于stm32来说,我认为学习的时候应该先仔细阅读相关的参考⼿册,然后再动⼿实践,这样才能理解得更加透彻,掌握得更加牢固!今天记录⼀下我学习stm32的ADC部分的了解。
1.介绍⼩结:stm32的ADC有18个通道(16个外部通道+2个内部通道),有单次、连续、扫描和间断四种模式,ADC的结果可以左对齐和右对齐的⽅式存储在16位的数据寄存器中(⼀般我们都是使⽤右对齐的⽅式)2、特征3、框图框图应该是最重要的部分了,理解了框图,对这个外设的理解就⽐较透彻了。
①模拟⾄数字转换器中有两个通道,⼀个是注⼊通道,⼀个是规则通道,对应的转换结果也是存储到注⼊通道数据寄存器和规则通道数据寄存器中(都是16位的);②注⼊通道数据寄存器有4个,规则通道数据寄存器只有1个,规则通道最多可以转化16个通道的数据,⽽结果都是存储在⼀个规则通道数据寄存器中,为了避免数据丢失,可以采⽤DMA搬运数据,提⾼效率。
③触发注⼊通道开始转化的外部触发信号有8种,如图所⽰,其中TIM8_CH4及其重映射只存在于⼤容量的产品中。
④类似于注⼊通道,触发规则通道的外部触发信号也有8种,如图所⽰,其中TIM8_TRGO及其重映射也只存在于⼤容量产品中。
⑤以上的两点只针对ADC1和ADC2,ADC3的触发信号有所不同,如图所⽰:⑥转换的过程如图,ADCx_IN0~ADCx_IN15共16个外部通道,通过GPIO端⼝将模拟量传达到模拟⾄数字转化器中的注⼊通道或者规则通道,另外还有两个内部通道温度传感器和V REFINT,同样也可以将模拟量传送到模拟⾄数字转化器中的注⼊通道或者规则通道,注⼊通道最多可以转换4个通道的模拟量,转换结果存储到注⼊通道数据寄存器中,转换完成后会产⽣JEOC标志位,规则通道最多可以转换16个通道,转换结果存储到规则通道数据寄存器中,转换完成后会产⽣EOC标志位。
详细的STM32单片机学习笔记STM32单片机学习笔记1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中21,意思是APB2接高速设备2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h 专门控制外围器件的配置,也就是开关头文件的作用3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC (Low Speed InternalRC)低速内部晶振,大概为40KHz左右,提供看门狗时钟和自动唤醒单元时钟源5、SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL6、MCO[2:0]可以提供4源不同的时钟同步信号,PA87、GPIO口貌似有两个反向串联的二极管用作钳位二极管。
8、总线矩阵采用轮换算法对系统总线和DMA进行仲裁9、ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥10、在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟11、数据字节以小端存储形式保存在存储器中12、内存映射区分为8个大块,每个块为512MB13、FLASH的一页为1K(小容量和中容量),大容量是2K。
14、系统存储区(SystemMemory)为ST公司出厂配置锁死,用户无法编辑,用于对FLASH 区域进行重新编程。
所以我们烧写程序务必选择BOOT1 = 0,这样通过内嵌的自举程序对。
Stm32硬件设计手册学习笔记
1.时钟系统的学习
STM32的系统时钟主要有3中来源:
A: HSI 内部高速时钟
B: HSE 外部高速时钟
C:PLL PLL时钟
STM32 的二级时钟源:
A: 40KHz 的内部RC (LSI RC)供独立看门狗和RTC唤醒使用B:32.768KHz 低速外部时钟(LSE )RTC 实时时钟
2.HSE的使用
3.时钟安全系统(CSS)
4.boot 控制
5.嵌入式bootloader 模式
通常使用UART1 实现bootloader ,参考手册AN2606
6.调试
7.
PCB设计建议
A:最好采用多层PCB板,分开VSS和VDD ,这样能很好的去耦和屏蔽干扰。
B:基于成本的考虑,对于少层板,主要还是要考虑电源和地的布线
C:布局的出去,将EMI干扰的不同电路分块,主要是,噪声,大电流电路,第电压电路,数字电路要分开。
D:接地和电源:各个功能块的接地要独立,然后汇总在一个接地点,形成的环路面积要尽可能的小
E:去耦:100nF和10uF 的电容并联
F:未使用的IO和未使用的功能块:未使用的时钟,IO单元要置1或者置0,未使用的功能块要禁止掉。
8.。
推挽输出与开漏输出的区别推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.要实现“线与”需要用OC(open collector)门电路.是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
问题:很多芯片的供电电压不一样,有3.3v和5.0v,需要把几种IC的不同口连接在一起,是不是直接连接就可以了?实际上系统是应用在I2C上面。
简答:1、部分3.3V器件有5V兼容性,可以利用这种容性直接连接2、应用电压转换器件,如TPS76733就是5V输入,转换成3.3V、1A输出。
开漏电路特点及应用在电路设计时我们常常遇到开漏(open drain)和开集(open collector)的概念。
所谓开漏电路概念中提到的“漏”就是指MOSFET的漏极。
同理,开集电路中的“集”就是指三极管的集电极。
开漏电路就是指以MOSFET的漏极为输出的电路。
一般的用法是会在漏极外部的电路添加上拉电阻。
完整的开漏电路应该由开漏器件和开漏上拉电阻组成。
如图1所示:组成开漏形式的电路有以下几个特点:1. 利用外部电路的驱动能力,减少IC内部的驱动。
当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。
IC内部仅需很下的栅极驱动电流。
如图1。
2. 可以将多个开漏输出的Pin,连接到一条线上。
形成“与逻辑” 关系。
如图1,当PIN_A、PIN_B、PIN_C任意一个变低后,开漏线上的逻辑就为0了。
这也是I2C,SMBus等总线判断总线占用状态的原理。
1、迷你版stm32共有64个引脚,分为4组ABCD,每组16个引脚
2、关于BSRR、BRR、ODR寄存器的区别于联系(BSRR可以只对一位操作而不影响其他位)
3、IO口时钟使能位设置函数: stm32f10x_rcc.h中第692、693、694行的函数:
RCC_AHBPeriphClockCmd
RCC_APB2PeriphClockCmd
RCC_APB1PeriphClockCmd
4、IO口使能参数定义在stm32f10x_rcc.h中的466行--554行:
5、关于IO口使能设置的方式:①首先查看硬件,找到对应要使用的IO口
②然后找到系统IO口使能参数的定义
③然后确定使能的位设置函数(RCC_AHBP eriphClockCmd,
RCC_APB2PeriphClockCmd,RCC_APB1PeriphClockCmd
中的一个)
④最后在main函数里面设置使能。
MDK:
6、GPIO寄存器描述:《STM32中文参考手册_V10》第八章。
其中,-GPIOx_CRL和-GPIOx_CRH用于配置GPIO的八种模式和三种最大输出速度。
-GPIOx_IDR用于读取IO口输入的电平(0或者1)。
-GPIOx_ODR和-GPIOx_BSRR以及-GPIOx_BRR都是用来设置IO口的输出(0或者1)。
以下为详细解释:
①、-GPIOx_CRL:32位寄存器,只能配置低八位的IO口。
STM32学习笔记目录STM32学习笔记 (1)一、入门 (2)目标->实战项目 (2)STM32学习方法 (3)ARM简介 (4)二、外设功能模块 (5)GPIO原理与工作模式 (5)串行通信 (6)硬件下载与调试 (6)Cortex-M3复用功能(AF)和重映射功能 (6)Systick的使用 (7)通用定时器 (7)SPI与数码管 (7)I2C通信 (8)NVIC中断 (8)PWM基础 (9)RCC内部结构与原理 (9)ADC模数转换 (10)内部温度传感器 (10)窗口看门狗 (10)USB应用 (11)三、问题 (11)在线调试 (12)一、入门STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,主要包括STM32F101“基本型”系列、STM32F103“增强型”系列、STM32F105、STM32F107“互联型”系列。
STM32微控制器满足嵌入式开发低功耗和高性能的要求,并且拥有简单易上手的固件函数库,避免了传统ARM单片机开发操作寄存器的模式,所以十分受欢迎,应用广泛。
作者只学过一些51单片机的基础,就直接上手STM32,边学边用。
该篇笔记也是随意的记录一下,要想系统的学习一下,个人认为资料手册(data sheet)、参考手册(Reference Manual)和用户手册(固件函数库)三个文档再有开发板实际操作,完全足够。
熟练掌握以上内容,触类旁通,成为STM32开发的高手指日可待。
目标->实战项目STM32学习方法开发环境(MDK/IAR)寄存器or固件库软件仿真&开发板硬件学习难度建立不受库版本限制的工程项目:1.准备好文件(Startup Code、Lib、User)2.建立工程不添加Startup Code3.工程管理添加需要的库文件、自定义文件4.编译链接ARM简介ARM7衍生出全新的Cortex架构,三管齐下:Cortex-A:高性能应用处理器。
(越来越接近电脑)Cortex-R:专门针对实时、深度嵌入式的解决方案。
(又快又实时)Cortex-M:专注低成本嵌入式微控制器。
(好用又便宜)Cortex-M中低端的芯片Cortex-M0:针对FPGA应用Cortex-M1:替代低成本MCU Cortex-M3:占领高性能MCU 市场Cortex-M3特点:高性能(哈佛结构+分支预测)、高集成度(单芯片)、高代码密度(Thumb2指令集)、内嵌NVIC中断(响应速度快)、低成本(最便宜的不到1美元)。
Cortex-M3处理器产品:STM32系列(瑞士意法半导体ST)、Stellaris 系列(美TI)、LPC1000系列(荷兰NXP)、AT91SAM3系列(美Atmel)STM32103VCT6引脚:80*GPIO或(外设)引脚复用20*(电源相关、复位、晶振)ATmega128是Atmel公司的8位系列单片机的最高配置的一款单片机。
ARM流水线指令处理:二、外设功能模块STM32库函数库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口。
灵活使用、驾轻就熟。
GPIO原理与工作模式1.设置GPIO引脚的工作模式2.引脚位运算: 寄存器BSRR/BRR位绑定:位n 映射到内存地址 a if a=0x01 低地址为 1 则n =1运算高效(替代读-修改-写)可绑定区域SRAM 0x2000 0000 ~ 0x200f ffff 1M空间位绑定公式:AliasAddr = 0x2200 0000 +((A-0x2000 0000)*8 +n)*4 n=(0 ~ 31)=0x2200 0000 +(A – 0x2000 0000)*32 + 4*n片上外设0x4000 0000 ~ 0x400f ffff 1M位绑定公式:AliasAddr = 0x4200 0000 +((A-0x4000 0000)*8 +n)*4=0x4200 0000 +(A – 0x4000 0000)*32 + 4*n位绑定操作:位绑定公式:位绑定编程:#define BitBand(Addr,BitNum) *((volatile unsigned long*)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))串行通信74LS164芯片实现串转并的功能:18 仿真通信、逻辑分析仪异步串行通信:协议内容:1起始位2数据位(8、9奇偶校验) 3停止位(1、1.5、2周期)4波特率设置串行异步收发转RS232(高电平),最远传输十几米。
RS485最远3000米,最大速率1Mbps,噪声干扰好。
数据发送过程:1、CR1使能UE位。
2、定义字长M 3。
3、CR2设置编程停止位STOP。
*4、配置DMA寄存器(多缓冲)5、CR1发送使能TE。
6、BRR寄存器设置波特率。
7、写数据到DR寄存器。
数据接收过程类似。
串口编程:1、打开时钟RCC,引脚设置:Rx浮空输入Tx 推挽输出2、将USART3的RX、TX重映射到PC10、PC11 ,USART3配置。
3、USART_SendData( USART3 , 0xf0);硬件下载与调试1、STM32芯片的内部存储结构2、FLASH下载与调试设置3、RAM下载与调试设置FLASH调试(0x0800 0000)只能烧写1000次。
RAM调试(0x2000 0000)芯片唯一UID地址:0x1FFF F7E8 – 0x1FFF F7F4 96bit/8 = 12 ByteID_num[i] = *(u8 *) ( 0x1FFF 7E9 + i) i->12Printf(“%x” , ID_num[i]);Cortex-M3复用功能(AF)和重映射功能复用功能配置(AFIO_MAPR 复用重映射和调试I/O配置寄存器)GPIO_PinRemapConfig(选择重映射的管脚,重映射的新状态)重映射优点:1、改善硬件设计2、额外增加资源UART-Printf重新定向Int fputc(int ch , FILE *f){//ch送到串口USART_SendData(USART1 , ch);//等待发送完毕While(USART_GetFlagStatus( USART1 , USART_FLAG_TC) == RESET );//返回chReturn(ch);}Systick的使用1、延时2、心跳传统的延时(空等待)for( i=0; i<m; i++) ;浪费CPU资源、M值不精确。
STM32执行一条指令只需几十ns。
Systick最高为HCLK/8。
内部是24位递减计数器即16M计数,Systick最高频率9M,即最慢产生16M/9M = 约1.8s中断。
SysTick_CounterCmd( )使能SysTick计数器。
SysTick_ITConfig( ) 使能SysTick中断。
SysTick_CLKSourceConfig( )时钟源设置。
SysTick_SetReload( ) 设置重装载值。
通用定时器1、TIM1和TIM8是能产生3对PWM互补输出的高级定时器,常用于电机的驱动,时钟由APB2产生。
2、其他6个为普通定时器,时钟由APB1产生。
Timer作用:1、定时功能2、计数功能3、输入捕获4、匹配输出5、PWM脉冲波原理5部分:1、时钟源2、时基部分3、输入4、输出5、寄存器部分定时器配置1、开启时钟RCC_APB1PeriphClockCmd( )。
2、利用TIM_DeInit( )函数将Timer设置成默认缺省值。
3、TIM_InternalClockConfig( )选择TIMx来设置内部时钟源。
4、TIM_Prescaler()设置预分频系数。
5、TIM_ClockDivision()来设置时钟分割。
6、TIM_CounterMode()来设置计数器模式。
7、TIM_Period() 来设置自动装入的值。
8、TIM_ARPPreloadConfig() 来设置是否使用预装载缓冲器。
9、TIM_ITConfig() 来开启TIMx的中断。
SPI与数码管74HC595芯片:串转并当SCLR为低电平时,输出端Q清零。
当SCLR为1,SCK出现上升沿时,内部寄存器移位并接受SER端发出来的数据。
当RCK出现上升沿时,74HC595内部寄存器的数据输出到QA—QH端。
SPI串行接口SPI是Motorola公司提出的一种同步串行外围接口。
在低速、低功耗、需保存少量参数的智能化传感系统中得到了广泛应用。
主要信号:1、MOSI 2、MISO 3、SCK串行时钟4、SS从机选择信号,低电平有效。
SPI主模式通信设置步骤:1、通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。
2、选择CPOL和CPHA位,定义数据传输和串行时钟的相位关系。
3、设置DFF位来定义8位或16位数据帧格式。
4、配置SPI_CR1寄存器的的LSBFIRST位定义帧格式。
5、如果NSS引脚需要工作在输入模式,硬件模式中在整个数据帧传输期间应把NSS引脚连接到高电平;在软件模式中,需设置SPI_CR1寄存器的SSM和SSI位,如果NSS引脚工作在输出模式,则只需设置SSOE位。
6、必须设置MSTR和SPE位(只当NSS连接到高电平,这些位才能保持置位)。
在这个配置中,MOSI引脚是数据输出,MISO引脚是数据输入。
I2C通信I2C bus是Philips公司推出的一种基于两线的芯片间串行传输总线。
采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件具有了最简单而灵活的拓展方法。
特点:1、二线传输2、无中心主机3、软件寻址4、应答式数据传输过程5、节点可带电接入或撤出*在I2C总线上只需串行数据SDA线和串行时钟SCL线两条线。
I2C配置1、开启端口、模块(IIC)时钟2、相应引脚初始化(开漏输出)/*重映射配置3、I2C配置I2C_Init()4、发送过程1)发送起始信号,while等待起始信号发送事件并清除。
2)发送器件地址,while等待发送结束3)发送器件内部写入地址,while等待移位寄存器空4)发送数据,while等待发送缓冲区空5)发送停止信号EEPROM使用CAT24WC16芯片是CATALYST(美凯特里斯)公司(已被安森美半导体ONSEMI)收购,生产的串行电可檫除的可编程存储器。
NVIC中断CM3中断优先级:抢占式优先级(主)和响应优先级(从)。