OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2405|回复: 1

新手求助 对端口输出的配置不懂 求大神们指点

[复制链接]

6

主题

16

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-3-24
在线时间
8 小时
发表于 2016-3-27 21:02:15 | 显示全部楼层 |阅读模式
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
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

16

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-3-24
在线时间
8 小时
 楼主| 发表于 2016-3-27 21:02:16 | 显示全部楼层
解决了 还是因为端口配置的问题 做更改之后就好了[mw_shl_code=c,true]#include "timer.h"
#include "delay.h"
#include "usart.h"       



void TIM2_IRQHandler(void)
{

       
        if(TIM2->SR&0X0001)//ò&#231;3&#246;&#214;D&#182;&#207;
        {       
    SPC_STEP=!SPC_STEP; //5khz
        }                                  
        TIM2->SR&=~(1<<0);//&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
}


//// void TIM3_IRQHandler(void)
////{
////       
//////        u16 ADD;
////        if(TIM3->SR&0X0001)//ò&#231;3&#246;&#214;D&#182;&#207;
////        {
////                CW=CW_1;  
////        }                                  
////        TIM2->SR&=~(1<<0);//&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
//// }
void TIM2_Int_Init(u16 arr,u16 psc)
{
//        printf("time_set \r\n");
        RCC->APB1ENR|=1<<0;        //TIM2ê±&#214;óê1&#196;ü  
        RCC->APB2ENR|=1<<4;
  GPIOC->CRL&=0XF0FFFFFF;//PC6&#199;&#229;á&#227;       
        GPIOC->CRL|=0X03000000;// ê&#228;3&#246;&#196;£ê&#189; 50Mhz
  
        TIM2->ARR=arr;          //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ
        TIM2->PSC=psc;          //&#212;¤·&#214;&#198;μ&#198;÷éè&#214;&#195;
        TIM2->DIER|=1<<0;   //&#212;êDí&#184;üD&#194;&#214;D&#182;&#207;                               
        TIM2->CR1|=0x01;    //ê1&#196;ü&#182;¨ê±&#198;÷2
  MY_NVIC_Init(1,3,TIM2_IRQn,2);//&#199;à&#213;&#188;1£&#172;×óó&#197;&#207;è&#188;&#182;3£&#172;×é2                                                                         
}

void TIM3_PWM_Init(u16 arr,u16 psc)
{                                                          
        RCC->APB1ENR|=1<<1;         //TIM3ê±&#214;óê1&#196;ü
        RCC->APB2ENR|=1<<2;            //ê1&#196;üPORTAê±&#214;ó            
        RCC->APB2ENR|=1<<3;            //ê1&#196;üPORTBê±&#214;ó       
        RCC->APB2ENR|=1<<4;       //ê1&#196;üPORTCê±&#214;ó       
       
       
        GPIOC->CRH&=0XFFFFFFF0;//PC8&#199;&#229;á&#227;       
        GPIOC->CRH|=0X0000000B;// &#184;′&#206;&#187;1|&#196;üê&#228;3&#246;
         

  RCC->APB2ENR|=1<<0;     //  
  AFIO->MAPR&=0XFFFFF3FF; //
  AFIO->MAPR|=3<<10;            
          

        TIM3->ARR=arr;                        //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ
        TIM3->PSC=psc;                        //&#212;¤·&#214;&#198;μ&#198;÷2&#187;·&#214;&#198;μ


           
        TIM3->CCMR2|=7<<4;          //CH3 PWM2&#196;£ê&#189;                 
        TIM3->CCMR2|=1<<3;             //CH3&#212;¤×°&#212;&#216;ê1&#196;ü          
        TIM3->CCER|=1<<8;           //OC3 ê&#228;3&#246;ê1&#196;ü
   

               
        TIM3->CCR3=1028;               //OC3 ê&#228;3&#246;ê1&#196;ü

        TIM3->CR1|=1<<7;               //ARPEê1&#196;ü
        TIM3->CR1|=0x01;            //ê1&#196;ü&#182;¨ê±&#198;÷3
  MY_NVIC_Init(1,2,TIM3_IRQn,2);       
}         

void dayin_Init(void)
{

        RCC->APB2ENR|=1<<4;    //ê1&#196;üPORTCê±&#214;ó                    

        GPIOC->CRL&=0XFF0F0FFF;
        GPIOC->CRL|=0X00303000;//PC5 PC3í&#198;íìê&#228;3&#246;            
  GPIOC->ODR|=1<<3;      //PC5 PC3ê&#228;3&#246;&#184;&#223;
        GPIOC->ODR|=1<<5;      //PC5 PC3ê&#228;3&#246;&#184;&#223;       
       
  delay_ms(3000);       
       
//  GPIOC->ODR|=0<<5;      //PC5 ê&#228;3&#246;μí       
        GPIOC->ODR&=~(1<<5);      //PC5 ê&#228;3&#246;μí       
       
        delay_ms(1000);
       
        GPIOC->ODR|=1<<5;      //PC5 PC3ê&#228;3&#246;&#184;&#223;       
  GPIOC->ODR&=~(1<<3);      //PC5 PC3ê&#228;3&#246;&#184;&#223;       
       
        delay_ms(3000);       
       

// GPIOC->ODR|=0<<5;      //PC5 ê&#228;3&#246;μí       
        GPIOC->ODR&=~(1<<5);      //PC5 ê&#228;3&#246;μí       
}

void songhe_Init(void)
{
        RCC->APB2ENR|=1<<4;    //ê1&#196;üPORTCê±&#214;ó                    

        GPIOC->CRH&=0XFFFFF00F;
        GPIOC->CRH|=0X00000330;//PC9 PC10í&#198;íìê&#228;3&#246;            
  GPIOC->ODR|=1<<9;      //PC9 ê&#228;3&#246;&#184;&#223;
        GPIOC->ODR|=1<<10;     // PC10ê&#228;3&#246;&#184;&#223;       
       
  delay_ms(3000);       
       
        GPIOC->ODR&=~(1<<10);      //PC10 ê&#228;3&#246;μí       
       
        delay_ms(1000);
       
        GPIOC->ODR|=1<<10;      //PC5 PC3ê&#228;3&#246;&#184;&#223;       
  GPIOC->ODR&=~(1<<9);      //PC5 PC3ê&#228;3&#246;&#184;&#223;       
       
        delay_ms(3000);       
       

  GPIOC->ODR&=~(1<<10);      //PC5 ê&#228;3&#246;μí       
}

void huanzha_Init(void)
{                       
        RCC->APB2ENR|=1<<4;    //ê1&#196;üPORTCê±&#214;ó                  
        RCC->APB2ENR|=1<<5;    //ê1&#196;üPORTDê±&#214;ó
       
  GPIOC->CRH&=0XFF0F0FFF;
        GPIOC->CRH|=0X00303000;//PC11 PC13 í&#198;íìê&#228;3&#246;
  GPIOC->ODR|=1<<11;      //PC11 ê&#228;3&#246;&#184;&#223;
  GPIOC->ODR&=~(1<<13);      //PC13 ê&#228;3&#246;μí               
                        if(!CCW&CW&check)
                                {
                                        delay_ms(3000);
                                        if(!check)
                                                {
                                                          GPIOC->ODR&=~(1<<11);      // PC11 ê&#228;3&#246;μí
                                                          GPIOC->ODR|=1<<13;      //PC13 ê&#228;3&#246;&#184;&#223;
                                                        delay_ms(3000);
                                                        if(!check)
                                                        {
                                                         GPIOC->ODR&=~(1<<11);      // PC11 ê&#228;3&#246;μí
                                                   GPIOC->ODR&=~(1<<13);      // PC13 ê&#228;3&#246;μí
                                                        }
                                                }
                                }                       
}
[/mw_shl_code]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 16:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表