微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM学习《六》——从头文件开始自己动手设置STM32串口通讯

ARM学习《六》——从头文件开始自己动手设置STM32串口通讯

时间:11-20 来源:互联网 点击:
运用STM32的库函数时,有时候为了看懂一句语句需要翻遍整个头文件,找到头文件中预定义的名字到底代表的是什么意思,具体寄存器设置的数值是多少,相当麻烦。我花了一天的时间才明白串口设置的具体过程,只是库函数想的比较周全。下面是我调试好的串口设置程序,头文件是我自己定义的,舍去了库文件中繁琐的结构体定义……

首先定义头文件:

/

RCC_CFGR &= (uint32_t)0xF8FF0000;

RCC_CR &= (uint32_t)0xFEF6FFFF;//

RCC_CR &= (uint32_t)0xFFFBFFFF;//

RCC_CFGR &= (uint32_t)0xFF80FFFF;//

RCC_CIR = 0x00000000;/

RCC_CR |=0x00010000;//

do

{

HSEStatus = RCC_CR & 0x00020000;

StartUpCounter++;

} while((HSEStatus == 0) && (StartUpCounter != 0x0500));

if ((RCC_CR & 0x00020000) != 0)

{

HSEStatus =0x01;

}

else

{

HSEStatus =0x00;

}

if (HSEStatus ==0x01)

{

RCC_CFGR |=0x00000000;//

RCC_CFGR |=0x00000000;//

RCC_CFGR |=0x00000000;//

RCC_CFGR &=(~(0x00010000 | 0x00020000 | 0x003C0000));

RCC_CFGR |= 0x00010000 | 0x00020000 | 0x000C0000;//

RCC_CR |= 0x01000000;//

while((RCC_CR & 0x02000000) == 0)//

{

}

RCC_CFGR &=~0x00000003;

RCC_CFGR |=0x00000002; //

while ((RCC_CFGR &0x0000000C) !=0x08) //

{

}

}

else

{while (1)

{

}

}

}

设置好时钟就可以串口初始化了:

void stm32_UsartSetup ()//串口初始化

{

RCC_APB2ENR|=0x00004000;// enable clock for USART1

RCC_APB2ENR|=0x00000001;//复用功能IO时钟使能

RCC_APB2ENR|=0x00000004;//端口A时钟使能

GPIO_PORTA_CRH&=~(0x00000FF0);// Clear PA9, PA10

GPIO_PORTA_CRH|=0x000000B0;// USART1 Tx (PA9)alternate output push-pull

GPIO_PORTA_CRH|=0x00000400;// USART1 Rx (PA10) input floating

USART1_BRR=0x00000823;////波特率9600/20M

USART1_CR1&=0xFFFFEFFF;// set Data bits

USART1_CR2&=0xFFFFCFFF;// set Stop bits

USART1_CR1&=0xFFFFFBFF;//// set Parity

USART1_CR1|=(0x00000004|0x00000008);// RX, TX enable

USART1_CR1|=0x00002000;// USART enable

}

到此串口设置设置完毕,下面我要和PC机通讯了,我要从上位机通过串口助手发送一字节的十六进制数,然后下位机(STM32)返回给PC机所发的一字节数据:

int main()

{

SystemInit0();

stm32_UsartSetup ();

while(1)

{

while(USART1->SR&0x00000020)//等待RXNE置位

{

flag=USART1_DR&0xff;

USART1_DR=flag&0xff;

while((USART1->SR)&0x80==0);//等待发送完毕

while((USART1->SR)&0x40==0);

flag=USART1->SR;

}

}

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top