OpenEdv-开源电子网

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

看了原子哥的一个tcs3200 程序 不知哪里出了问题

[复制链接]

2

主题

3

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-11-25
在线时间
1 小时
发表于 2015-12-29 20:27:02 | 显示全部楼层 |阅读模式
5金钱
#include "stm32f10x.h"
#include "stm32fx_delay.h"
#include "stdio.h"
#include "ddg_usart.h"
#include "lcd.h"
#include "exit.h"

#define S0 PAout(0)
#define S1 PAout(1)
#define S2 PAout(2)
#define S3 PAout(3)
#define OUT PBin(6)

#define PA1 GPIOA->BSRR
#define PA0 GPIOA->BRR

#define GPIOA_ODR_A  (GPIOA_BASE+0x0C)
#define GPIOA_IDR_A  (GPIOA_BASE+0x08)
#define GPIOA_ODR_B  (GPIOB_BASE+0x0C)
#define GPIOA_IDR_B  (GPIOB_BASE+0x08)
#define GPIOA_ODR_C  (GPIOC_BASE+0x0C)
#define GPIOA_IDR_C  (GPIOC_BASE+0x08)
#define GPIOA_ODR_D  (GPIOD_BASE+0x0C)
#define GPIOA_IDR_D  (GPIOD_BASE+0x08)
#define GPIOA_ODR_E  (GPIOE_BASE+0x0C)
#define GPIOA_IDR_E  (GPIOE_BASE+0x08)

#define BitBand(Addr,BitNum)    *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))

#define PAout(n)   BitBand(GPIOA_ODR_A,n)
#define PAin(n)    BitBand(GPIOA_IDR_A,n)
#define PBout(n)   BitBand(GPIOB_ODR_A,n)
#define PBin(n)    BitBand(GPIOB_IDR_A,n)
#define PCout(n)   BitBand(GPIOC_ODR_A,n)
#define PCin(n)    BitBand(GPIOC_IDR_A,n)
#define PDout(n)   BitBand(GPIOD_ODR_A,n)
#define PDin(n)    BitBand(GPIOD_IDR_A,n)
#define PEout(n)   BitBand(GPIOE_ODR_A,n)
#define PEin(n)    BitBand(GPIOE_IDR_A,n)

uint8_t Rgena,Ggena,Bgena;
uint16_t Ramount=10,Gamount=10,Bamount=10;
uint16_t amount;
void EXTI9_5_IRQHandler(void)
{

        if(EXTI_GetITStatus(EXTI_Line6) != RESET) //è·±£ê&#199;·&#241;2úéúá&#203;EXTI Line&#214;D&#182;&#207;
        {
               
                        amount++;                 
                        EXTI_ClearITPendingBit(EXTI_Line6);    //&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;

        }  
       
}


void GPIO_Configuration()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);
         
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
}   
void whitebalance(void)
{

        EXTI_PA0_Config();
        NVIC_Configuration();
        S2=0;S3=0;//oìé&#171;í¨μà
        amount=0;                         //&#191;aê&#188;&#188;&#198;êy
        DelayMs(10);
        Rgena = amount;   //&#199;ó3&#246;oìé&#171;òò×ó      
        amount=0;
//----------------------------------
        S2=1;S3=1;//&#194;ìé&#171;í¨μà
        amount=0;
        DelayMs(10);
        Ggena = amount;         //&#199;ó3&#246;&#194;ìé&#171;òò×ó
        amount=0;
//----------------------------------
        S2=0;S3=1;//à&#182;é&#171;í¨μà
        amount=0;
        DelayMs(10);
        Bgena = amount;          //&#199;ó3&#246;à&#182;é&#171;òò×ó
        amount=0;
        S2=1;S3=0;//1&#216;±&#213;í¨μà            
}  

u16 tcs3200_RED(void)
{
        S2=0;S3=0;
        amount=0;
        DelayMs(10);
        Ramount=(u32) amount*255/Rgena;         //è&#161;R&#214;μ
        if(Ramount>255) Ramount = 255;
        return Ramount;
        //amount=0;
}

u16 tcs3200_GREEN(void)
{
        S2=1;S3=1;
        amount=0;
        DelayMs(10);
        Gamount=(u32) amount*255/Ggena;        //è&#161;G&#214;μ
        if(Gamount>255) Gamount = 255;
        return Gamount;
//amount=0;
}

u16 tcs3200_BLUE(void)
{
        S2=0;S3=1;
        amount=0;
        DelayMs(10);
        Bamount=(u32) amount*255/Bgena;//è¥B&#214;μ
        if(Bamount>255) Bamount = 255;
        return Bamount;
        //amount=0;
}



int main(void)
{

        Init_SysTick();
        GPIO_Configuration();
        EXTI_PA0_Config();
        NVIC_Configuration();
                USART1_Configuration();
                whitebalance();
                tcs3200_BLUE();
                tcs3200_GREEN();
                tcs3200_RED();
       
                printf("%d\n",Ramount);
               
                printf("%d\n",Gamount);
                printf("%d\n",Bamount);
        while(1)
        {
        GPIO_ResetBits(GPIOA, GPIO_Pin_3);
        DelayMs(1000);
       
       
        }
       
       
}




int fputc(int ch,FILE *f)
{
        //ch&#203;í&#184;&#248;USART1
        USART_SendData(USART1, ch);
        //μè′y·¢&#203;ííê±&#207;
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET) ;
        //·μ&#187;&#216;ch
        return(ch);
}






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-29 22:40:57 | 显示全部楼层
这个我没写过哦....是别人的代码吧?
回复

使用道具 举报

7

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2015-12-13
在线时间
60 小时
发表于 2016-3-12 16:49:27 | 显示全部楼层
能把原程序发一下吗,想参考一下!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 16:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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