标题:
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://www.51hei.com/bbs/)
Powered by Discuz! X3.1