91视频丝瓜-91视频完整版高清-91视频网-91视频网店-91视频网或将从此无大神-91视频网入口

您好,歡迎訪問上海現易電子元器件有限公司網站!

021-51870898
021-51870898   18019251567
4新聞資訊
您的位置: 首頁 ->  新聞資訊 -> 單片機

?STM32單片機電源端并聯電容的重要性

文章出處:單片機 責任編輯:上海現易電子元器件有限公司 發表時間:2020-11-10

如圖,筆者用TQFP(32-100PIN)0.55MM轉直插的轉接板焊了一個STM32F207VET6的板子。板上引出了SWD調試接口(僅占用PA13和PA14),USART1串口引腳,插了一個觸摸傳感器和蜂鳴器模塊。

所要實現的功能是:用手觸碰一下觸摸傳感器后,蜂鳴器響一聲。

接觸摸傳感器模塊輸出信號接到PA0口上。在沒有接電源電容之前,每一次單片機復位(無論是軟件復位還是按下復位鍵復位),PA0上會自動產生一個異常的高電平,要等上將近10秒才會回到低電平,然后觸摸傳感器才能正常工作。每次復位的時候蜂鳴器都會響一下,10秒之內按觸摸鍵都沒有反應。

后來我接了一個4.7μF的電解電容器和兩個100nF的無極性電容器,問題就解決了。單片機復位后蜂鳴器不會響,手按觸摸鍵后馬上就能響,不用再等10秒。

還有,不接電容器,串口下載以及SWD/JTAG下載有時也會受影響。特別是沒有外接25MHz的HSE晶振的情況下,Flash Loader Demo(串口燒寫STM32的工具)經常連不上芯片。

這說明,這些電容對保證單片機以及外圍器件運行的可靠性非常重要。


【20-Pin的SWD調試接口連線】


【測試用的程序】

#include  

#include  

  

int fputc(int ch, FILE *fp)  

{  

  if (fp == stdout)  

  {  

    if (ch == '\n')  

    {  

      while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  

      USART_SendData(USART1, '\r');  

    }  

    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  

    USART_SendData(USART1, ch);  

  }  

  return ch;  

}  

  

void showclk(void)  

{  

  RCC_ClocksTypeDef clocks;  

  RCC_GetClocksFreq(&clocks);  

  printf("USART1->BRR=%d\n", USART1->BRR);  

  printf("SYSCLK=%dHz HCLK=%dHz PCLK1=%dHz PCLK2=%dHz\n", clocks.SYSCLK_Frequency, clocks.HCLK_Frequency, clocks.PCLK1_Frequency, clocks.PCLK2_Frequency);  

  printf("HSERDY=%d, SYSCLK=%d\n", RCC_GetFlagStatus(RCC_FLAG_HSERDY), RCC_GetSYSCLKSource());  

}  

  

int main(void)  

{  

  EXTI_InitTypeDef exti;  

  GPIO_InitTypeDef gpio;  

  TIM_OCInitTypeDef oc;  

  TIM_TimeBaseInitTypeDef tim;  

  USART_InitTypeDef usart;  

    

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR " RCC_APB1Periph_TIM2, ENABLE);  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);  

  PWR_BackupAccessCmd(ENABLE);  

    

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_TIM2);  

  gpio.GPIO_Mode = GPIO_Mode_AF;  

  gpio.GPIO_OType = GPIO_OType_PP;  

  gpio.GPIO_Pin = GPIO_Pin_3;  

  gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;  

  gpio.GPIO_Speed = GPIO_Speed_2MHz;  

  GPIO_Init(GPIOA, &gpio);  

    

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);  

  gpio.GPIO_Pin = GPIO_Pin_9;  

  gpio.GPIO_Speed = GPIO_Speed_50MHz;  

  GPIO_Init(GPIOA, &gpio);  

    

  USART_StructInit(&usart);  

  usart.USART_BaudRate = 115200;  

  USART_Init(USART1, &usart);  

  USART_Cmd(USART1, ENABLE);  

    

  showclk();  

    

  if (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == SET)  

    printf("LSE on!\n");  

  else  

  {  

    RCC_ITConfig(RCC_IT_LSERDY, ENABLE);  

    NVIC_EnableIRQ(RCC_IRQn);  

    RCC_LSEConfig(RCC_LSE_ON);  

  }  

    

  TIM_UpdateRequestConfig(TIM2, TIM_UpdateSource_Regular);  

  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);  

  NVIC_EnableIRQ(TIM2_IRQn);  

    

  TIM_TimeBaseStructInit(&tim);  

  tim.TIM_Period = 9;  

  tim.TIM_Prescaler = 1699;  

  TIM_TimeBaseInit(TIM2, &tim);  

    

  oc.TIM_OCMode = TIM_OCMode_PWM2;  

  oc.TIM_OCPolarity = TIM_OCPolarity_High;  

  oc.TIM_OutputState = TIM_OutputState_Enable;  

  oc.TIM_Pulse = 4;  

  TIM_OC4Init(TIM2, &oc);  

    

  exti.EXTI_Line = EXTI_Line0;  

  exti.EXTI_LineCmd = ENABLE;  

  exti.EXTI_Mode = EXTI_Mode_Interrupt;  

  exti.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  

  EXTI_Init(&exti);  

  NVIC_EnableIRQ(EXTI0_IRQn);  

    

  while (1)  

    __WFI();  

}  

  

void EXTI0_IRQHandler(void)  

{  

  EXTI_ClearITPendingBit(EXTI_Line0);  

  if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_SET)  

  {  

    TIM_Cmd(TIM2, ENABLE);  

    printf("Touch!\n");  

  }  

  else  

    printf("Released!\n");  

}  

  

void RCC_IRQHandler(void)  

{  

  if (RCC_GetITStatus(RCC_IT_LSERDY) == SET)  

  {  

    RCC_ClearITPendingBit(RCC_IT_LSERDY);  

    printf("LSE ready!\n");  

  }  

}  

  

void TIM2_IRQHandler(void)  

{  

  static uint16_t counter = 0;  

  if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)  

  {  

    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  

    counter++;  

    if (counter == 999)  

      TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Single);  

    else if (counter == 1000)  

    {  

      counter = 0;  

      TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Repetitive);  

    }  

  }  

}  


上海現易電子元器件有限公司 版權所有 未經授權禁止復制或鏡像

CopyRight 2020-2025 www.urqm.cn All rights reserved   滬ICP備2020031792號

友情鏈接:

電話

易經理

18019251567

微信

易經理

易經理

頂部

咨詢
主站蜘蛛池模板: 日本免费观看日本高清视频 | 被群CAO的合不拢腿H两根一起 | 成人app在线观看 | 另类二区 | 国产又粗又长又大精品A片 国产又大又黑又粗免费视频 | 亚洲免费视频在线 | 最近中文字幕在线中文视频 | 日本免费v片一二三区 | 久久久久久久久久久9精品视频 | 国产妇女性爽视频免费 | 夂久亚州精华国产精华华液 | 鲁鲁在线视频 | 制服师生一区二区三区在线 | 国产亚洲精品久久久久久线投注 | 爱婷婷网站在线观看 | 亚洲人成无码久久久AAA片 | 热99久久 | 亚洲国产欧美日本视频 | 欧美亚洲日本一区二区三区浪人 | 国产又粗又深又猛又爽又黄A片 | 国产精品乱码高清在线观看 | 好大好硬好爽18禁视频免费 | 黄网站色视频大全免费观看 | 色吧网 | 熟女人妻上司中文字幕 | 香港三级日本三级妇人三级 | 国内一级片 | 毛片网站在线观看 | 无人视频免费观看免费直播下载 | 免费成人电影在线观看 | 啪啪日韩 | 总裁高H掹C纯肉小黄书 | 四川丰满护士毛茸茸 | 久久精品国产99国产精品澳门 | 狠狠色色综合网站 | 午夜一区欧美二区高清三区 | 国色天香网 | 国产电影一区二区三曲爱妃记 | 国产精品久久久久国产A级 国产精品久久久AV久久久 | 中冶葫芦岛有色金属集团有限公司 | 亚洲无人区码一码二码三码的区 |