欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2104|回復: 1
打印 上一主題 下一主題
收起左側

STM32 pwm采集,與4路輸出程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:622215 發表于 2019-10-11 11:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
pwm采集,與4路輸出,不懂的就問

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "stm32f10x_tim.h"
  4. #include "Tim4ToTim1.h"
  5. #include "..\oled_spi\oled_spi.h"
  6. #include "..\oled_spi\bmp.h"
  7. #include "USART.h"

  8. //PWM波形輸出與測量實例
  9. //TIM4-Ch1(PB6-9) 輸出PWM波形到
  10. //Tim1-CH2(PA9)捕獲

  11. void InitLED1()//PB8對應板上LED1燈
  12. {
  13.         GPIO_InitTypeDef GPIO_InitStructure;
  14.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);        
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
  18.         GPIO_Init(GPIOB ,&GPIO_InitStructure) ;
  19. }

  20. uint32_t CntsforMs=0;
  21. uint32_t lastCntsforMs=0;
  22. void InitTimeCounter(void)//計時器
  23. {
  24.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  25.         NVIC_InitTypeDef NVIC_InitStructure;
  26.        
  27.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  ///使能TIM3時鐘
  28.        
  29.   TIM_TimeBaseInitStructure.TIM_Period = 1000;         //自動重裝載值
  30.         TIM_TimeBaseInitStructure.TIM_Prescaler=71;  //定時器分頻:72Mhz/(71+1)=1Mhz
  31.         TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數模式
  32.         TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  33.        
  34.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
  35.        
  36.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允許定時器3更新中斷
  37.         TIM_Cmd(TIM3,ENABLE); //使能定時器3
  38.        
  39.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定時器3中斷
  40.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //搶占優先級1
  41.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子優先級3
  42.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  43.         NVIC_Init(&NVIC_InitStructure);
  44. }

  45. //定時器3中斷服務函數
  46. void TIM3_IRQHandler(void)
  47. {
  48.         if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷
  49.         {
  50.                 CntsforMs++;
  51.                 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清除中斷標志位
  52.         }
  53. }


  54. uint32_t dT;
  55. char Line1[32],Line2[32],Line3[32],Line4[32],Line5[32],Line6[32],Line7[32];
  56. int main()
  57. {
  58.   int cnts=0;
  59.         int vol=3300;
  60.         char buf1[16],buf2[16],buf3[16],buf4[16];
  61.        
  62.         DelayInit(72);
  63.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級

  64. //        InitLED1();//PB8點亮LED1燈
  65.         InitTim4ToTim1();//PB6,7,8,9輸出PWM波形,Tim1-CH1(PA8)捕獲
  66.         InitTimeCounter();//只用TIM3來計時
  67.         uart1_init(9600);//PA9==Tx,PA10==Rx
  68.         //uart1_send("Test:ABCD",8);
  69.        
  70.         OLED_Init();//PA4,5,7;PB0,1
  71.         OLED_Display_On();
  72.         OLED_DrawBMP(0,0,128,64,BMP1);
  73.         DelayS(2);
  74.         OLED_Clear();

  75.         float heading=0.0;
  76.         while(1)
  77.         {
  78.                 uart1_send("1", 1);
  79.                 cnts++;
  80.                 dT =        CntsforMs-lastCntsforMs;
  81.           lastCntsforMs = CntsforMs;
  82.                 sprintf(Line1, "T=%dS,dT=%02dms", CntsforMs/1000,dT);

  83.           TIM4->CCR3 = 20000-(cnts%2000)*10; //TIM4-Ch3(PB8) 輸出PWM波形到
  84.                        
  85.                 sprintf(Line2, "%dUs/%dus", PWM_Width*MinPwmWidth,PWM_Period*MinPwmWidth);//PWM波形寬度/PWM波形周期
  86.                 sprintf(Line3, "%.2f%s", PWM_Width*100.0/(float)PWM_Period,"%");//PWM波形占空比
  87.                
  88.                 OLED__ShowStr(0,0,(u8*)Line1,2);
  89.                 OLED__ShowStr(0,2,(u8*)Line2,2);
  90.                 OLED__ShowStr(0,4,(u8*)Line3,2);
  91.                 if (USART1_RxState&0x8000)
  92.                         {
  93.                         USART1_RxState = 0;
  94.                         heading = (USART1_RxBuf[2]-0x30)*100.0+(USART1_RxBuf[3]-0x30)*10.0;
  95.                         heading        += (USART1_RxBuf[4]-0x30)*1.0+(USART1_RxBuf[5]-0x30)*0.1;
  96.                         sprintf(Line4, "Head = %.1f", heading);//
  97.                         }
  98.                 OLED__ShowStr(0,6,(u8*)Line4,2);
  99. //                DelayMs(100);
  100.   }
  101. }




  102.             

  103. /*********************************************END OF FILE**********************/
復制代碼

所有資料51hei提供下載:
TestStm32F103C8(中景園核心板+OLED+USART1+Tim4輸出PWM波形由Tim1測量實例+Tim3計時).7z (48.34 KB, 下載次數: 9)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2019-10-11 17:22 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表