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

微信

易經理

易經理

頂部

咨詢
主站蜘蛛池模板: 最近中文国语字幕在线播放视频 | jizz亚洲视频 | 舌头伸进去添的我好爽高潮视频 | 欧美激情A片无码大尺度 | 开心四房播播网 | 亚洲一区二区三区秋霞秋理 | 国内精品一卡二卡三卡公司 | 国产视频一二三区 | 国产酒店自拍 | 色情A片成人网站免费看 | 最近高清中文在线字幕在线观看1 | 国产成人午夜精品影院 | 久久这里只有精品无码3D | 国产精品免费视频能看 | 国产成人AV大片大片在线 | 最好看免费视频大全在线观看 | 综合久青草视频 | 麻豆乱码1区2区新区 | 最新国产精品好看的国产精品 | 4色播 | 久久综合亚洲鲁鲁五月天欧美 | 日本不卡不码高清免费观看 | 色欲AV蜜臀AV在线观看麻豆 | 亚洲 日本 中文字幕 制服 | 精品国产九九 | 欧美视频日韩专区午夜 | 国产精品亚洲视频在线观看 | 婷婷丁香五月激情综合站 | 综合干狼人综合首页 | 中文字幕一区波多野结衣 | 欧美手机手机在线视频一区 | 天天黄色 | 乱码一卡二卡新区永久入口 | 在线视频永久免费网站 | 欧美69久成人做爰视频 | 成人国产免费 | 久久亚洲精品中文字幕三区 | 亚洲AV无码一区二区三区牛牛 | 天天干天天操天天操 | 99re6在线精品视频免费播放 | 涩涩爱涩涩片影院 |