本人以前学过51单片机,知道ARM这个东西后一直向往,最近终于入手一块“战舰V3 精英板”(买板子的时候,没注意看板子资源,看到“精英”二字,以为是STM32F103ZET6板子里面最牛的,而且看价格还不是最贵的,果断买了精英板),经过几天的C语言学习、keil安装及使用学习、Jlink使用学习、工程模板(基于固件库)建立……我的STM32学习终于走上正轨。之前听过别人分享如何学习STM32,其中强调了一点,就是加入一个论坛,在论坛中跟大家一起学习,共同进步,于是今天就开贴(以前水过,从来没发过贴),从零开始学习STM32(以前学过51,但是没了解过STM32,不知道算不算从零开始),记录我的学习历程,记录一个系统性地学习STM32的过程,以求跟坛友共同进步,同时以后传递给别人准备学STM32的人一些经验。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
学习了嵌套向量中断后,对自己昨天的串口初始化程序作了代码补充和注释补充,加深了对串口配置和嵌套向量中断配置的了解;
代码修改为如下,在板子上跑了一会没有发现问题:
[mw_shl_code=applescript,true]void UART_Init(u32 baud)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 初始化时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE); // 使能USART1、PA时钟
// 初始化串口的GPIO口
// USART1_TX -> GPIOA.9;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //模式设置为复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
// USART1_RX -> GPIOA.10;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //模式设置为浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 初始化串口1
USART_InitStructure.USART_BaudRate = baud; // 波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 字长:8b
USART_InitStructure.USART_StopBits = USART_StopBits_1; // 停止位:1
USART_InitStructure.USART_Parity = USART_Parity_No; // 奇偶校验位:无
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 硬件流控制:无
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 收、发
// USART_DeInit(USART1); // 复位串口1
USART_Init(USART1, &USART_InitStructure); // 初始化串口1
// 开启串口1接收中断
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 开启串口1中断
// 开启串口1
USART_Cmd(USART1, ENABLE); // 使能串口1
// Usart1 NVIC 配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 优先级分组位长度模式2:先占优先级 2 位,从优先级 2 位
// 如果在其他地方配置过NVIC_PriorityGroup,则不用在这里配置
// 配置串口1中断
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // 选择串口1
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // 抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQ通道使能
NVIC_Init(&NVIC_InitStructure); // 根据指定的参数初始化VIC寄存器
} [/mw_shl_code]
一周热门 更多>