从零开始学STM32(开贴记录我的学习历程)

2019-07-24 13:22发布

本人以前学过51单片机,知道ARM这个东西后一直向往,最近终于入手一块“战舰V3 精英板”(买板子的时候,没注意看板子资源,看到“精英”二字,以为是STM32F103ZET6板子里面最牛的,而且看价格还不是最贵的,果断买了精英板),经过几天的C语言学习、keil安装及使用学习、Jlink使用学习、工程模板(基于固件库)建立……我的STM32学习终于走上正轨。之前听过别人分享如何学习STM32,其中强调了一点,就是加入一个论坛,在论坛中跟大家一起学习,共同进步,于是今天就开贴(以前水过,从来没发过贴),从零开始学习STM32(以前学过51,但是没了解过STM32,不知道算不算从零开始),记录我的学习历程,记录一个系统性地学习STM32的过程,以求跟坛友共同进步,同时以后传递给别人准备学STM32的人一些经验。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
49条回答
忘月19920216
2019-07-29 21:35
【2016-03-12】继续学习串口,补学中断
学习了嵌套向量中断后,对自己昨天的串口初始化程序作了代码补充和注释补充,加深了对串口配置和嵌套向量中断配置的了解;
代码修改为如下,在板子上跑了一会没有发现问题:
[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]

一周热门 更多>