下面回答你第一个问题:他只是要设置GPIOA_Pin_9,这个口是usart1 的发送端,即USART1_TX,其他口无所谓。
第二个问题,对usart1先进行复位,就比如单片机使用时习惯先复位,目的是让它处于一个明确的初始状态
第三个问题,可能你参考了一些其他程序,这里先给你源函数
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
{
u32 temp,temp1
temp1=(~NVIC_Group)&0x07//取后三位
temp1<<=8
temp=SCB->AIRCR //读取先前的设置
temp&=0X0000F8FF//清空先前分组
temp|=0X05FA0000//写入钥匙
temp|=temp1
SCB->AIRCR=temp //设置分组
}
//设置NVIC
//NVIC_PreemptionPriority:抢占优先级
//NVIC_SubPriority :响应优先级悉数
//NVIC_Channel :中断编号
//NVIC_Group :中断分组 0~4
//注意优先级不能超过设定的组的范围!否则会有意想不到的错误
//组划分:
//组0:0位抢占优先级,4位响应优先级
//组1:1位抢占优先级,3位响应优先级
//组2:2位抢占优先级,2位响应优先级
//组3:3位抢占优先级,1位响应优先级
//组4:4位抢占优先级,0位响应优先级
//NVIC_SubPriority和NVIC_PreemptionPriority的原则是,数值越贺散小,越优先
//CHECK OK
//100329
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
{
u32 temp
u8 IPRADDR=NVIC_Channel/4 //每组只能存4个,得到组地址
u8 IPROFFSET=NVIC_Channel%4//在组内的偏移
IPROFFSET=IPROFFSET*8+4 //得到偏移的确切位置
MY_NVIC_PriorityGroupConfig(NVIC_Group)//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group)
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group)
temp&=0xf//取低四位
if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel//使能中断位(要清除的话,相反 *** 作就OK)
else NVIC->ISER[1]|=1<<(NVIC_Channel-32)
NVIC->IPR[IPRADDR]|=temp<<IPROFFSET//设置响应优先级和抢断优先级
}
可能你没有看MY_NVIC_Init()
参考技术手册
USART1->CR1|=1<<8
PEIE: PE 中断使能
软件对该位置位或者清零
0:中断被禁止;
1:当USART_SR中的PE为1 时,产生USART中断。
USART1->CR1|=1<<5;
RXNEIE: 接收缓冲区非空中断使能
软件对该位置位或者清零
0:禅陆氏中断被禁止;
1:当USART_SR中的ORE或者RXNE 为1时,产生USART中断。
接下来一句MY_NVIC_Init(3,3,USART1_IRQChannel,2)就是进行中断分组,优先级设置。
我也在学stm32,有什么不懂的,再一起探讨。
一般来说,在使用STM32进行IO *** 作时,先写输出,再把IO方向设置为输出,是因为在输入模式下,在槐并没有外部信号输入时,引脚上可能会有一个随机的电平,而当IO方向设置为输出后,这个随机电平可能会亏明掘引起引脚销核上的电流变化,导致系统出现不可预料的错误。因此,在设置引脚IO方向之前,最好先将引脚设置为输出,以避免出现意外情况。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)