新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2016-3-24
- 在线时间
- 8 小时
|
15金钱
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "timer.h"
#include "usart.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
TIM3_PWM_Init(2057,4); //7KHz
TIM2_Int_Init(100,71);//通用定时器中断初始化
daying_Init();
while(1)
{
daying_Init();
songhe_Init();
//huanzha_Init();
}
}
/*daying_Init();和songhe_Init();均有循环执行 但是都没有输出
问题一:不懂得输出端口的配置 尝试了用寄存器的方法 也尝试了用define的名称均不可以实现
问题二:if()语句的嵌套 时间有问题
例如:
if(TIM2->SR&0X0001)//溢出中断
{
SPC_STEP=!SPC_STEP; //5khz
size_1+=size_1;
printf("000000");
if(size_1>=5000)
{
flag_1 = ~flag_1;
size_1 = 0;
size_2+=size_2;
printf("111111");
if(size_2 > 1)
{
flag_2 = ~flag_2;
size_2=0;
printf("0000000");
}
}
其中 000000与111111会同步同时输出 里应该5000次“000000”后出现一次“111111“
不明原因.*/
[/mw_shl_code]
[mw_shl_code=applescript,true]#include "timer.h"
#include "delay.h"
#include "usart.h"
void TIM2_IRQHandler(void)
{
if(TIM2->SR&0X0001)//溢出中断
{
SPC_STEP=!SPC_STEP; //5khz
}
TIM2->SR&=~(1<<0);//清除中断标志位
}
//// void TIM3_IRQHandler(void)
////{
////
////// u16 ADD;
//// if(TIM3->SR&0X0001)//溢出中断
//// {
//// CW=CW_1;
//// }
//// TIM2->SR&=~(1<<0);//清除中断标志位
//// }
void TIM2_Int_Init(u16 arr,u16 psc)
{
// printf("time_set \r\n");
RCC->APB1ENR|=1<<0; //TIM2时钟使能
RCC->APB2ENR|=1<<4;
GPIOC->CRL&=0XF0FFFFFF;//PC6清零
GPIOC->CRL|=0X03000000;// 输出模式 50Mhz
TIM2->ARR=arr; //设定计数器自动重装值
TIM2->PSC=psc; //预分频器设置
TIM2->DIER|=1<<0; //允许更新中断
TIM2->CR1|=0x01; //使能定时器2
MY_NVIC_Init(1,3,TIM2_IRQn,2);//抢占1,子优先级3,组2
}
void TIM3_PWM_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRH&=0XFFFFFFF0;//PC8清零
GPIOC->CRH|=0X0000000B;// 复位功能输出
RCC->APB2ENR|=1<<0; //
AFIO->MAPR&=0XFFFFF3FF; //
AFIO->MAPR|=3<<10;
TIM3->ARR=arr; //设定计数器自动重装值
TIM3->PSC=psc; //预分频器不分频
TIM3->CCMR2|=7<<4; //CH3 PWM2模式
TIM3->CCMR2|=1<<3; //CH3预装载使能
TIM3->CCER|=1<<8; //OC3 输出使能
TIM3->CCR3=1028; //OC3 输出使能
TIM3->CR1|=1<<7; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
MY_NVIC_Init(1,2,TIM3_IRQn,2);
}
void daying_Init(void)
{
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRL&=0XFF0F0FFF;
GPIOC->CRL|=0X00303000;//PC5 PC3推挽输出
GPIOC->ODR|=1<<3; //PC5 PC3输出高
GPIOC->ODR|=1<<5; //PC5 PC3输出高
delay_ms(3000);
GPIOC->CRL&=0XFF0FFFFF;
GPIOC->CRL|=0X00300000;//PC5 推挽输出
GPIOC->ODR|=0<<5; //PC5 输出低
delay_ms(1000);
GPIOC->CRL&=0XFF0F0FFF;
GPIOC->CRL|=0X00303000;//PC5 PC3推挽输出
GPIOC->ODR|=1<<5; //PC5 PC3输出高
GPIOC->ODR|=0<<3; //PC5 PC3输出高
delay_ms(3000);
GPIOC->CRL&=0XFF0FFFFF;
GPIOC->CRL|=0X00300000;//PC5 推挽输出
GPIOC->ODR|=0<<5; //PC5 输出低
}
void songhe_Init(void)
{
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRH&=0XFFFFF00F;
GPIOC->CRH|=0X00000330;//PC9 PC10推挽输出
GPIOC->ODR|=1<<2; //PC9 PC10输出高
GPIOC->ODR|=1<<1; //PC9 PC10输出高
delay_ms(3000);
GPIOC->CRH&=0XFFFFF0FF;
GPIOC->CRH|=0X00000300;//PC10 推挽输出
GPIOC->ODR|=0<<2; //PC10 输出低
delay_ms(1000);
GPIOC->CRH&=0XFFFFF00F;
GPIOC->CRH|=0X00000330;//PC9 PC10推挽输出
GPIOC->ODR|=1<<2; //PC5 PC3输出高
GPIOC->ODR|=0<<1; //PC5 PC3输出高
delay_ms(3000);
GPIOC->CRH&=0XFFFFF0FF;
GPIOC->CRH|=0X00000300;//PC5 推挽输出
GPIOC->ODR|=0<<2; //PC5 输出低
}
void huanzha_Init(void)
{
RCC->APB2ENR|=1<<4; //使能PORTC时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
GPIOC->CRH&=0XFF0F0FFF;
GPIOC->CRH|=0X00303000;//PC11 PC13 推挽输出
GPIOC->ODR|=1<<3; //PC11 输出高
GPIOC->ODR|=0<<5; //PC13 输出低
if(!CCW&CW&check)
{
delay_ms(3000);
if(!check)
{
GPIOC->CRH&=0XFF0F0FFF;
GPIOC->CRH|=0X00303000;//PC11 PC13 推挽输出
GPIOC->ODR|=0<<3; // PC11 输出低
GPIOC->ODR|=1<<5; //PC13 输出高
delay_ms(3000);
if(!check)
{
GPIOC->CRH&=0XFF0F0FFF;
GPIOC->CRH|=0X00303000;//PC11 PC13 推挽输出
GPIOC->ODR|=0<<3; // PC11 输出低
GPIOC->ODR|=0<<5; //PC13 输出低
}
}
}
}
[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
解决了 还是因为端口配置的问题 做更改之后就好了[mw_shl_code=c,true]#include "timer.h"
#include "delay.h"
#include "usart.h"
void TIM2_IRQHandler(void)
{
if(TIM2->SR&0X0001)//òç3öÖD¶Ï
{
SPC_STEP=!SPC_STEP; //5khz
}
TIM2->SR&=~(1SR&=~(1PSC=psc; //Ô¤·ÖÆμÆ÷éèÖÃ
TIM2->DIER|=1APB1ENR|=1
|