你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L073RZ的串口问题请教

[复制链接]
ataudio 提问时间:2017-7-4 10:08 /
50ST金币
使用STM32L073RZ开发的过程中,有两个疑问请网友帮忙解答一下。谢谢!

1)在STM32L073上使用4个串口,不包括LPUART。配置USART4和5时,HAL库中定义了USART4_5_IRQn作为中断向量。是否会导致中断乱入,或者不可控。有没有网友同时使用过?如果有深入理解的朋友,能不能对原理做下解释。
/*!< Interrupt Number Definition */
typedef enum
{
/******  Cortex-M0 Processor Exceptions Numbers ******************************************************/
  NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */
  HardFault_IRQn              = -13,    /*!< 3 Cortex-M0+ Hard Fault Interrupt                       */
  SVC_IRQn                    = -5,     /*!< 11 Cortex-M0+ SV Call Interrupt                         */
  PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0+ Pend SV Interrupt                         */
  SysTick_IRQn                = -1,     /*!< 15 Cortex-M0+ System Tick Interrupt                     */

/******  STM32L-0 specific Interrupt Numbers *********************************************************/
  WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */
  PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detect Interrupt                  */
  RTC_IRQn                    = 2,      /*!< RTC through EXTI Line Interrupt                         */
  FLASH_IRQn                  = 3,      /*!< FLASH Interrupt                                         */
  RCC_CRS_IRQn                = 4,      /*!< RCC and CRS Interrupts                                  */
  EXTI0_1_IRQn                = 5,      /*!< EXTI Line 0 and 1 Interrupts                            */
  EXTI2_3_IRQn                = 6,      /*!< EXTI Line 2 and 3 Interrupts                            */
  EXTI4_15_IRQn               = 7,      /*!< EXTI Line 4 to 15 Interrupts                            */
  TSC_IRQn                    = 8,      /*!< TSC Interrupt                                           */
  DMA1_Channel1_IRQn          = 9,      /*!< DMA1 Channel 1 Interrupt                                */
  DMA1_Channel2_3_IRQn        = 10,     /*!< DMA1 Channel 2 and Channel 3 Interrupts                 */
  DMA1_Channel4_5_6_7_IRQn    = 11,     /*!< DMA1 Channel 4, Channel 5, Channel 6 and Channel 7 Interrupts */
  ADC1_COMP_IRQn              = 12,     /*!< ADC1, COMP1 and COMP2 Interrupts                        */
  LPTIM1_IRQn                 = 13,     /*!< LPTIM1 Interrupt                                        */
  USART4_5_IRQn               = 14,     /*!< USART4 and USART5 Interrupt                             */
  TIM2_IRQn                   = 15,     /*!< TIM2 Interrupt                                          */
  TIM3_IRQn                   = 16,     /*!< TIM3 Interrupt                                          */
  TIM6_DAC_IRQn               = 17,     /*!< TIM6 and DAC Interrupts                                 */
  TIM7_IRQn                   = 18,     /*!< TIM7 Interrupt                                          */
  TIM21_IRQn                  = 20,     /*!< TIM21 Interrupt                                         */
  I2C3_IRQn                   = 21,     /*!< I2C3 Interrupt                                          */
  TIM22_IRQn                  = 22,     /*!< TIM22 Interrupt                                         */
  I2C1_IRQn                   = 23,     /*!< I2C1 Interrupt                                          */
  I2C2_IRQn                   = 24,     /*!< I2C2 Interrupt                                          */
  SPI1_IRQn                   = 25,     /*!< SPI1 Interrupt                                          */
  SPI2_IRQn                   = 26,     /*!< SPI2 Interrupt                                          */
  USART1_IRQn                 = 27,     /*!< USART1 Interrupt                                        */
  USART2_IRQn                 = 28,     /*!< USART2 Interrupt                                        */
  RNG_LPUART1_IRQn            = 29,     /*!< RNG and LPUART1 Interrupts                              */
  LCD_IRQn                    = 30,     /*!< LCD Interrupt                                           */
  USB_IRQn                    = 31,     /*!< USB global Interrupt                                    */
} IRQn_Type;


配置USART4的代码:
              ....
                __HAL_RCC_USART4_CLK_ENABLE();
               
                GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
                GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
                GPIO_InitStruct.Pull = GPIO_PULLUP;
                GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
                GPIO_InitStruct.Alternate = GPIO_AF6_USART4;
                HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

                /* Peripheral interrupt init */
                HAL_NVIC_SetPriority(USART4_5_IRQn, 0, 0);
                HAL_NVIC_EnableIRQ(USART4_5_IRQn);


              .....

配置USART5的代码基本也类似。中断向量号IRQn也完全一样,这样USART4和5不会冲突吗?

2)配置USART2的GPIO的Alternate 时,有:
GPIO_InitStruct.Alternate = GPIO_AF0_USART2;
也有:
GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
这里的AF0和AF4只见存在怎样的差异,对芯片实际有什么影响?




谢谢各位不吝指点!

最佳答案

查看完整内容

不會乱入 USART_ISR_RXNE可辨別
收藏 评论6 发布时间:2017-7-4 10:08

举报

6个回答
chuan199 回答时间:2017-7-4 10:08:31
不會乱入
USART_ISR_RXNE可辨別
废鱼 回答时间:2017-7-4 15:21:25
不会的,可以通过判断产生标志位来判断是哪个产生的。

评分

参与人数 1ST金币 +5 收起 理由
ataudio + 5 很给力!很有帮助。

查看全部评分

MrJiu 回答时间:2017-7-5 09:30:57
参考资料上面,会有很详细的介绍!!!当然了,肯定没看!!!

评分

参与人数 1ST金币 +6 收起 理由
ataudio + 6 谢谢兄弟,授人以渔。

查看全部评分

ataudio 回答时间:2017-7-5 11:22:56
MrJiu 发表于 2017-7-5 09:30
参考资料上面,会有很详细的介绍!!!当然了,肯定没看!!!

看的不仔细。跳着看的。
ataudio 回答时间:2017-7-5 13:42:16
本帖最后由 ataudio 于 2017-7-5 14:08 编辑
chuan199 发表于 2017-7-4 10:44
不會乱入
USART_ISR_RXNE可辨別

请教第二个问题,GPIO_AF0_USART2和GPIO_AF4_USART2这样的设置有什么区别呢?
现在查到了。根据参考手册,查找数据手册的ALternate function map可以找到说明。
chuan199 回答时间:2017-7-6 08:29:22
基本上GPIO_AF0_USART2和GPIO_AF4_USART2表示不同GPIO
多看数据手册和範例程式…很多問題自己都可解決
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版