STM32自学周记(三)
这一周的学习直接从实验入手,遇到不懂的地方回过头学习理论知识,掌握了串口通信的原理和UVIC中断优先级管理。
实验方面,串口的初始化和跑马灯的初始化操作方法类似,对照芯片资料,选择io口,最后的返回值也要注意用“&”符号取地址。感觉STM32的学习是一个模仿的过程,很多东西没有必要知道为什么,只需要知道不这么做有有什么影响,因此需要设置这样的参数。所以这一周的学习有些摸不清头脑,出现了一些问题需要解决,最让我不解的就是中断系统,看了网上的资料都说这是51单片机的基础,之后是不是应该考虑学习一段51打打基础?
这是按照给出的步骤所写的程序:
#include "stm32f10x.h"
void W_RQ_Init(void)
{
GPIO_InitTypeDef GPIO_InitTypeWRQ;
USART_InitTypeDef USART_InitTypeWRQ;
NVIC_InitTypeDef NVIC_InitTypeWRQ;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
GPIO_InitTypeWRQ.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitTypeWRQ.GPIO_Pin=GPIO_Pin_9;
GPIO_InitTypeWRQ.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitTypeWRQ);
//GPIOPA9的初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
GPIO_InitTypeWRQ.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitTypeWRQ.GPIO_Pin=GPIO_Pin_10;
GPIO_InitTypeWRQ.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitTypeWRQ);
//GPIOPA10的初始化
USART_InitTypeWRQ.USART_BaudRate=115200;
USART_InitTypeWRQ.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitTypeWRQ.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitTypeWRQ.USART_Parity=USART_Parity_No;
USART_InitTypeWRQ.USART_StopBits=USART_StopBits_1;
USART_InitTypeWRQ.USART_WordLength=USART_WordLength_8b;
NVIC_Init(&NVIC_InitTypeWRQ);
}
void USART1_IRQHandler(void)//中断服务函数
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
res=USART_ReceiveData(USART1);
USART_SendData(USART1,res);
USART_ClearFlag(USART1,USART_FLAG_RXNE);
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //NVIC中断优先管理
W_RQ_Init();
while(1);
}
实验现象
无论输入什么,它所显示的始终是8F或者CF,始终没有找到问题所在,希望得到老师的指点。
个人认为串口的学习需要花费一些时间,未来的几周打算结合中断系统的实验继续学习串口通信,基础一定要打牢。