牛人的STM32学习笔记寄存器版本Word文档下载推荐.docx
- 文档编号:22680360
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:43
- 大小:48.86KB
牛人的STM32学习笔记寄存器版本Word文档下载推荐.docx
《牛人的STM32学习笔记寄存器版本Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《牛人的STM32学习笔记寄存器版本Word文档下载推荐.docx(43页珍藏版)》请在冰豆网上搜索。
28
27
26
25
24
CNF7[1:
0]
MODE7[1:
CNF6[1:
MODE6[1:
23
22
21
20
19
18
17
16
CNF5[1:
MODE5[1:
CNF4[1:
MODE4[1:
CNF3[1:
MODE3[1:
CNF2[1:
MODE2[1:
CNF1[1:
MODE1[1:
CNF0[1:
MODE0[1:
GPIOx_CRL(x=A~G(端口配置低寄存器x=A…E)
该寄存器用于配置GPIOx的低8位,具体8种模式的配置见《中文参考手册》例如:
GPIOD->
CRL&
=0XFFFFF0FF;
GPIOD->
CRL|=0X00000300;
/PD.2推挽输出;
其余IO口的低8位以此类推。
CNF15[1:
MODE15[1:
CNF14[1:
MODE14[1:
CNF13[1:
MODE13[1:
CNF12[1:
MODE12[1:
CNF11[1:
MODE11[1:
CNF10[1:
MODE10[1:
CNF9[1:
MODE9[1:
CNF8[1:
MODE8[1:
GPIOx_CRH(端口配置高寄存器x=A…E)
该寄存器用于配置GPIOx的高8位,具体8种模式的配置见《中文参考手册》例如:
GPIOA->
CRH&
=0XFFFFFFF0;
;
CRH|=0X00000003;
//PA8推挽输出;
其余IO口的高8位以此类推。
(3)端口的输入和输出电平配置
IDR15
IDR14
IDR13
IDR12
IDR11
IDR10
IDR9
IDR8
IDR7
IDR6
IDR5
IDR4
IDR3
IDR2
IDR1
IDR0
GPIOx_IDR(端口输入数据寄存器x=A…E)
该寄存器配置IO口的0~15位的输入数据,以16位读出。
ODR15
ODR14
ODR13
ODR12
ODR11
ODR10
ODR9
ODR8
ODR7
ODR6
ODR5
ODR4
ODR3
ODR2
ODR1
ODR0
GPIOx_ODR(端口输出数据寄存器x=A…E)
该寄存器配置IO口的0~15位的输入初始状态,例如:
ODR|=1<
13;
//PA13上拉输入
一般GPIO口配置可仿以下两个程序:
voidKEY_Init(void)
{
RCC->
APB2ENR|=1<
//使能PORTA时钟
//PA0设置成输入
CRL|=0X00000008;
=0X0F0FFFFF;
//PA13,15设置成输入
CRH|=0X80800000;
13;
//PA13上拉,PA0默认下拉
15;
//PA15上拉
}
voidLED_Init(void)
//使能PORTA时钟
5;
//使能PORTD时钟
CRH|=0X00000003;
//PA8推挽输出
8;
//PA8输出高
=0XFFFFF0FF;
CRL|=0X00000300;
//PD.2推挽输出
//PD.2输出高
}
二、串口通信
STM32最多可以提供5路串口,其串口配置主要有以下步骤:
(1)串口时钟使能
RCC_APB2ENR的0~15位(16~32位保留)
在寄存器RCC_APB2ENR里的第14位就是对串口1的时钟使能即:
RCC_APB2ENR|=1<
14;
//使能串口1时钟,那么除串口1的时钟使能在RCC_APB2ENR外其余的时钟使能位在寄存器RCC_APB1ENR里,看下表:
DACEN
PWREN
BKPEN
CANEN
USBEN
I2C2EN
I2C1EN
UART5EN
UART4EN
UART3EN
UART2EN
SPI3EN
SPI2EN
WWDGEN
TIM7EN
TIM6EN
TIM5EN
TIM4EN
TIM3EN
TIM2EN
RCC_APB1ENR
例如:
RCC_APB1ENR|=1<
17;
//使能串口2时钟,其余串口时钟使能以此类推。
(2)串口复位即结束复位
STM32在使用串口时不管当前该串口出于什么状态都先要将其复位,而复位后要将其结束复位。
串口复位主要在寄存器RCC_APB1RSTR(串口1的复位)和寄存器
RCC_APB2RSTR(其余串口复位)这两个寄存器如下表
ADC3RST
USART1RST
TIM8RST
SPI1RST
TIM1RST
ADC2RST
ADC1RST
IOPGRST
IOPFRST
IOPERST
IOPDRST
IOPCRST
IOPBRST
IOPARST
AFIORST
RCC_APB2RSTR(APB2外设复位寄存器)
寄存器RCC_APB2RSTR的第14位是进行串口1的复位如:
RCC_APB1RSTR|=1<
//将串口1复位,然后结束复位RCC_APB1RSTR|=~(1<
14);
//结束串口1复位
其余串口复位在寄存器RCC_APB1RSTR里如下表:
DACRST
PWRRST
BKPRST
CANRST
USBRST
I2C2RST
I2C1RST
UART5RST
UART4RST
UART3RST
UART2RST
SPI3RST
SPI2RST
WWDGRST
TIM7RST
TIM6RST
TIM5RST
TIM4RST
TIM3RST
TIM2TST
RCC_APB1RSTR(APB1外设复位寄存器)
如:
RCC_APB1RSTR|=1<
//复位串口2RCC_APB1RSTR|=~(1<
17);
//结束串口2复位,其余串口复位操作以此类推。
(3)串口波特率设置
DIV_Mantissa[11:
4]
DIV_Mantissa[3:
DIV_Fraction[3:
USART_BRR(波特比率寄存器)
该寄存器的15-4位:
0]USARTDIV的整数部分,这12位定义了USART分频器除法因子(USARTDIV)的整数部分;
3-0位:
0]USARTDIV的小数部分,这4位定义了USART分频器除法因子(USARTDIV)的小数部分。
关于波特率设置在函数
voiduart_init(u32pclk2,u32bound)里已经设置好,并且封装在usart.c文件里面可以直接调用。
(4)串口控制
STM32的每个串口都有3个控制寄存器(USART_CR1~3)控制,例如USART_CR1如下:
UE
M
WAKE
PCE
PS
PEIE
TXEIE
TCIE
RXNEIE
IDLEIE
TE
RE
RWU
SBK
USART_CR1(控制寄存器1)
该寄存器32~14位保留,第13位使能串口(任何串口在应用的时候都必需将其置“1”)第12位设置字长,当这位为“0”的时候设置串口位8个字长外加n个停止位,这n个停止位在寄存器USART_CR2中第[13:
12]位来决定。
PCE为奇偶校验使能位设置为“0”则禁止校验,否则使能校验。
PS是交验选择位,设置为“0”则为偶校验,否则为奇校验。
PEIE:
PE(校验错误)中断使能,该位由软件设置或清除,定义:
0(禁止产生中断),1(当USART_SR中的PE为’1’时,产生USART中断)。
TXEIE发送缓冲区空中断使能,(手动),定义:
0(禁止产生中断),1(当USART_SR中的TXE为’1’时,产生USART中断)。
TCIE发送完成中断使能,(手动),定义:
0(禁止产生中断)1(当USART_SR中的TC为’1’时,产生USART中断)。
RXNEIE接收缓冲区非空中断使能,(手动),定义:
0(禁止产生中断),1(当USART_SR中的ORE或者RXNE为’1’时,产生USART中断)。
TE为发送使能位,设置为“1”将开启串口的发送功能。
RE为接收使能位,用法同TE。
LINEN
STOP[1:
CLKEN
CPOL
CPHA
LBCL
LBDIE
LBDL
ADD[3:
USART_CR2(控制寄存器2)
USART1->
CR1|=0X200C;
//1位停止,无校验位.0X200C=0010000000001100B
设置成使能串口8个字长1个停止位(USART_CR2中[13:
12]默认为“0”)禁止校验,禁止校验所有中断,使能发送和接收。
(5)数据发送和接收
DR[8]
DR[7:
USART_DR(数据寄存器)
发送数据缓存寄存器(向它写数据它会自动发送数据),当接收到数据时则存放接收的数据
(6)串口控制
CTS
LBD
TXE
TC
RXNE
LDLE
ORE
NE
FE
PE
USART_SR
参考程序:
voiduart_init(u32pclk2,u32bound)
{
floattemp;
u16mantissa;
u16fraction;
temp=(float)(pclk2*1000000)/(bound*16);
//得到USARTDIV
mantissa=temp;
//得到整数部分
fraction=(temp-mantissa)*16;
//得到小数部分
mantissa<
=4;
mantissa+=fraction;
RCC->
//使能PORTA口时钟
//使能串口时钟
GPIOA->
=0XFFFFF00F;
CRH|=0X000008B0;
//IO状态设置
APB2RSTR|=1<
//复位串口1
APB2RSTR&
=~(1<
//停止复位
//波特率设置
USART1->
BRR=mantissa;
//波特率设置
USART1->
//1位停止,无校验位.
#ifdefEN_USART1_RX//如果使能了接收
//使能接收中断
CR1|=1<
//PE中断使能
//接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);
//组2,最低优先级
#endif
}
voidUSART1_IRQHandler(void)
u8res;
if(USART1->
SR&
(1<
5))//接收到数据
{
res=USART1->
DR;
if((USART_RX_STA&
0x80)==0)//接收未完成
{
if(USART_RX_STA&
0x40)//接收到了0x0d
{
if(res!
=0x0a)USART_RX_STA=0;
//接收错误,重新开始
elseUSART_RX_STA|=0x80;
//接收完成了
}else//还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x40;
else
{
USART_RX_BUF[USART_RX_STA&
0X3F]=res;
USART_RX_STA++;
if(USART_RX_STA>
63)USART_RX_STA=0;
//接收数据错误,重新开始接收
}
}
}
}
以上两个函数已经封装在usart.c中可直接调用
三、外部中断
STM32的每一个IO口都可以作为中断输入,要想把IO口作为中断输入则必须将IO口设置成上拉/下拉输入或浮空输入(设置成浮空输入时要接上拉或下拉电阻否则可能导致中断不断触发)。
下面总结一下设置IO口为外部中断时的步骤:
(1)将IO口设置成输入模式
这个在第一章总结过,这里不多说。
(2)开启IO口复用时钟,设置IO口与中断线的映射关系
这一步在函数voidEx_NVIC_Config(u8GPIOx,u8BITx,u8TRIM)中已经封装好可直接调用这里说一下IO口的复用时钟使能:
RCC_APB2ENR
RCC_APB2ENR|=0X01;
//使能IO口复用时钟
(3)开启与该IO口相对应的线上中断/事件,并设置触发条件
这一步封装在函数voidEx_NVIC_Config(u8GPIOx,u8BITx,u8TRIM)中,可以直接调用,例如:
Ex_NVIC_Config(GPIO_A,0,RTIR);
//设置PA(0)上升沿触发
Ex_NVIC_Config(GPIO_A,13,FTIR);
//设置PA(13)下降沿触发
(4)配置中断分组(NVIC)并使能中断
这一步封装在函数voidMY_NVIC_Init(u8NVIC_PreemptionPriority,u8NVIC_SubPriority,u8NVIC_Channel,u8NVIC_Group)里面可以直接调用,例如:
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);
//抢占2,子优先级2,组2
这里值得注意的是EXTI0、EXTI1、EXTI2、EXTI3、EXTI4为Line0~Line4
EXTI15_10为Line15~Line10EXTI9_5为Line9~Line5
(5)编写中断服务函数
voidEXTI15_10_IRQHandler(void)
{
delay_ms(10);
//消抖
if(KEY0==0)//按键0
{
LED0=!
LED0;
elseif(KEY1==0)//按键1
LED1=!
LED1;
EXTI->
PR=1<
//清除LINE13上的中断标志位
//清除LINE15上的中断标志位
四、定时计数器中断
STM32共有8个定时计数器,其中TIME1和TIME8是高级定时器,TIME2~TIME5是通用定时器,TIME6和TIME7是基本定时器,这里以TIME3为例先总结以下定时计数器的基本用法。
定时计数器TIME3中断的配置步骤:
(1)TIME3时钟使能
APB1ENR|=1<
1;
//使能TIME3的时钟;
2;
//使能TIME4的时钟;
3;
//使能TIME5的时钟;
APB1ENR|=0X01;
//使能TIME2的时钟使能;
(RCC->
0;
)
其余的一次类推。
RCC_APB2ENR
(2)设置TIM3_ARR和TIM3_PSC的值
这两个位分别设置自动重装值及分频系数
ARR[15:
8]
ARR[7:
TIMx_ARR(TIM6和TIM7自动重装载寄存器)
PSC[15:
PSC[7:
TIMx_PSC(TIM6和TIM7预分频器)
(3)设置TIM3_DIER允许更新中断
TDE
保留
CC4DE
CC3DE
CC2DE
CC1DE
UDE
TIE
CC4IE
CC3IE
CC2IE
CC1IE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 学习 笔记 寄存器 版本