初级会员

- 积分
- 54
- 金钱
- 54
- 注册时间
- 2015-7-25
- 在线时间
- 1 小时
|
我刚从一个软件小菜鸟转到嵌入式,在这方面是新手,在做串口实验的扩展时(把串口1改为串口2)遇到了几个小波折,下面发个帖子总结一下。
1. 首先需要对硬件进行一点修改,需要将串口2和电脑USB串口连接,通过查看手册以及CPU引脚图,我们能查到串口2的输出输入口分别对应PA2和PA3这两个引脚,因此我们需要使用杜邦线把RXD和PA2、TXD和PA3分别连接起来。
2. 这一步我们需要修改波特率。在查看《STM32不完全手册V2.3》时我们找到如下一句话“PCLK1用于USART2、3、4、5,PCKL2用于USART1”,通过查看《STM32中文参考手册》我们会找到如下这一句话“只有USART1使用PCLK2(最高72MHz)。其它USART使用PCLK1(最高36MHz)”。在串口1的实验中我们配置波特率的代码如下:
uart_init(72,9600);
因此在串口2的实验中,我们需要改为:
uart_init(36,9600);
3. 接下来需要修改时钟、相关寄存器以及修改串口名字等。这一步仍然需要查看《STM32中文参考手册》,从中找到串口2的时钟使能位以及复位。接下来就是细心活了,需要在代码中把和串口1中相关的名字改为串口2。重要的函数如下:
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//????USARTDIV
mantissa=temp; //??????????·?
fraction=(temp-mantissa)*16; //??????????·?
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //????PORTA???±??
RCC->APB1ENR|=1<<17; //?????®???±??
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;//IO×????è??
RCC->APB2RSTR|=1<<17; //?????®??2
RCC->APB2RSTR&=~(1<<17);//????????
//?¨?????è??
USART2->BRR=mantissa; // ?¨?????è??
USART2->CR1|=0X200C; //1??????,?????é??.
#ifdef EN_USART2_RX //??????????????
//????????????
USART2->CR1|=1<<8; //PE????????
USART2->CR1|=1<<5; //??????????·???????????
MY_NVIC_Init(3,3,USART2_IRQChannel,2);//×é2??×?????????
#endif
}
以上。
参考:
1.《STM32不完全手册V2.3》
2.《STM32中文参考手册》
3.《MiniSTM32_V2.0_SCH》
4. http://www.openedv.com/posts/list/27701.htm
|
|