欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32 pwm采集,與4路輸出程序
[打印本頁]
作者:
lilang123
時間:
2019-10-11 11:53
標題:
STM32 pwm采集,與4路輸出程序
pwm采集,與4路輸出,不懂的就問
單片機源程序如下:
#include "stm32f10x.h"
#include "delay.h"
#include "stm32f10x_tim.h"
#include "Tim4ToTim1.h"
#include "..\oled_spi\oled_spi.h"
#include "..\oled_spi\bmp.h"
#include "USART.h"
//PWM波形輸出與測量實例
//TIM4-Ch1(PB6-9) 輸出PWM波形到
//Tim1-CH2(PA9)捕獲
void InitLED1()//PB8對應板上LED1燈
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_Init(GPIOB ,&GPIO_InitStructure) ;
}
uint32_t CntsforMs=0;
uint32_t lastCntsforMs=0;
void InitTimeCounter(void)//計時器
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3時鐘
TIM_TimeBaseInitStructure.TIM_Period = 1000; //自動重裝載值
TIM_TimeBaseInitStructure.TIM_Prescaler=71; //定時器分頻:72Mhz/(71+1)=1Mhz
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允許定時器3更新中斷
TIM_Cmd(TIM3,ENABLE); //使能定時器3
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定時器3中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //搶占優先級1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子優先級3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//定時器3中斷服務函數
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷
{
CntsforMs++;
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中斷標志位
}
}
uint32_t dT;
char Line1[32],Line2[32],Line3[32],Line4[32],Line5[32],Line6[32],Line7[32];
int main()
{
int cnts=0;
int vol=3300;
char buf1[16],buf2[16],buf3[16],buf4[16];
DelayInit(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
// InitLED1();//PB8點亮LED1燈
InitTim4ToTim1();//PB6,7,8,9輸出PWM波形,Tim1-CH1(PA8)捕獲
InitTimeCounter();//只用TIM3來計時
uart1_init(9600);//PA9==Tx,PA10==Rx
//uart1_send("Test:ABCD",8);
OLED_Init();//PA4,5,7;PB0,1
OLED_Display_On();
OLED_DrawBMP(0,0,128,64,BMP1);
DelayS(2);
OLED_Clear();
float heading=0.0;
while(1)
{
uart1_send("1", 1);
cnts++;
dT = CntsforMs-lastCntsforMs;
lastCntsforMs = CntsforMs;
sprintf(Line1, "T=%dS,dT=%02dms", CntsforMs/1000,dT);
TIM4->CCR3 = 20000-(cnts%2000)*10; //TIM4-Ch3(PB8) 輸出PWM波形到
sprintf(Line2, "%dUs/%dus", PWM_Width*MinPwmWidth,PWM_Period*MinPwmWidth);//PWM波形寬度/PWM波形周期
sprintf(Line3, "%.2f%s", PWM_Width*100.0/(float)PWM_Period,"%");//PWM波形占空比
OLED__ShowStr(0,0,(u8*)Line1,2);
OLED__ShowStr(0,2,(u8*)Line2,2);
OLED__ShowStr(0,4,(u8*)Line3,2);
if (USART1_RxState&0x8000)
{
USART1_RxState = 0;
heading = (USART1_RxBuf[2]-0x30)*100.0+(USART1_RxBuf[3]-0x30)*10.0;
heading += (USART1_RxBuf[4]-0x30)*1.0+(USART1_RxBuf[5]-0x30)*0.1;
sprintf(Line4, "Head = %.1f", heading);//
}
OLED__ShowStr(0,6,(u8*)Line4,2);
// DelayMs(100);
}
}
/*********************************************END OF FILE**********************/
復制代碼
所有資料51hei提供下載:
TestStm32F103C8(中景園核心板+OLED+USART1+Tim4輸出PWM波形由Tim1測量實例+Tim3計時).7z
(48.34 KB, 下載次數: 9)
2019-10-11 17:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-10-11 17:22
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1