当前位置:首页 > 单片机 > 单片机
[导读]问题描述:利用stm32串口通信,当PC端发送字符8时,LED PB.0闪亮第一步:配置系统时钟,这个不用多讲,代码就不贴出来了;第二步:GPIO端口配置: 设置PA.9为复用推挽输出,PA.10为浮空输入,PB.0,PB.1,PB.2输出并初始

问题描述:利用stm32串口通信,当PC端发送字符8时,LED PB.0闪亮

第一步:配置系统时钟,这个不用多讲,代码就不贴出来了;

第二步:GPIO端口配置:

设置PA.9为复用推挽输出,PA.10为浮空输入,PB.0,PB.1,PB.2输出并初始化PB.0亮

voidGPIO_Config()

{

GPIOA->CRH=0X04B0;

GPIOB->CRL=0X0333;

GPIOB->ODR=0X01;

}

第三步:USART寄存器配置:


voidUSART_Config()

{

USART1->BRR=0x1D4C;

USART1->CR1|=0X202C;

}


第一行,设置波特率9600 第二行,使能USART,接受中断打开,发送使能,接受使能;

第四步:NVIC寄存器配置:


voidNVIC_Configuration()

{

u32temp;

temp=SCB->AIRCR;

temp&=0x0000f8ff;

temp|=0x05fa0000;

temp|=0x0700;

SCB->AIRCR=temp;

NVIC->ISER[1]=1<<5;

NVIC->IP[1]=0;

}


前几行的代码没什么变化,通过向量表找到相应的USART1的序号,然后根据序号写上后两行就行,NVIC->ISER中断使能寄存器,NVIC->IP中断优先级控制寄存器,最后一行不要也行。

接下来是led函数:直接上代码


voidled()

{

GPIOB->ODR=0X01;

Delay_ms(100);

GPIOB->ODR=0;

Delay_ms(100);

}

然后是main函数:一直让它while下去吧!


intmain()

{

SysclkConfiguration();

GPIO_Config();

USART_Config();

NVIC_Configuration();

while(1)

{

if(temp==1)

led();

}

}

最后是中断服务函数:没啥要注意的,直接上代码(刚开始一直把函数名写错了,费了好大事)


unsignedchardata1;

externu8temp;

voidUSART1_IRQHandler(void)

{

data1=USART1->DR;

if(temp==0)

temp=1;

else

temp=0;

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭