OpenEdv-开源电子网

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

求解释为什么?我使用的STM32f373VC

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-5-26
在线时间
0 小时
发表于 2014-5-30 18:01:44 | 显示全部楼层 |阅读模式
5金钱

/* 函数功能:读取输入寄存器(模拟量输入)

    函数输入:两个指针,pointer_1指向用来存放输入信息帧的数组,

             pointer_2用来指向存放输出信息帧的数组(两个数组的第一个元素都用来存放信息帧的有效字节个数)

             后面的元素按照Modbus协议组织。                                                    

    函数输出:无。

                                                                                          */

 void ReadInputReg(u8 *pointer_1,u8 *pointer_2)//pointer_1用作输入,pointer_2用作输出

 {

    u16 Address=0;//待读取寄存器起始地址(HoldReg,i为0-99对应地址从0到99)

    u16 Num=0;//要读取的寄存器个数

    u16 SendKey;//要发送数据的校验值

    u32 PortTemp;//用来存放从端口取过来的数据,临时计算用

    u16 ReadData=0;//用来临时存放从端口读来的数据

    u32 CalTemp=0;//用来临时计算

 

   

    Address=(u16)(*(pointer_1+3))*256+(*(pointer_1+4));//先得到寄存器起始地址

    Num=(u16)(*(pointer_1+5))*256+(*(pointer_1+6));//先得到要读取的寄存器个数

    *(pointer_2+2)=0x04;//第三个字节为功能码

 

    if(*(pointer_1)==8)    //如果接收到的字节数不是8个,就是一个错误帧

    {

       if(Address<2) //只要地址小于2,就是合法地址

       {

           if(Address+Num<=2&&Num>0) //只要地址加数量大于0小于2,就是合法数量

           {

              //用于for循环

              u8 i;

              u8 j;

                           

              *(pointer_2+3)=Num*2;//第四个字节为要发送的字节个数

              *(pointer_2)=1+1+1+Num*2+2;//有效字节个数等于丛机地址+功能码+字节个数+寄存器信息+CRC校验

   

              //将端口ADC1和ADC2的数据预先读入到临时的数据缓存中

              ReadData=ADC_GetConversionValue(ADC2);

              PortTemp=(u32)(ReadData);

              PortTemp=PortTemp<<16;

              ReadData=ADC_GetConversionValue(ADC1);

              PortTemp=PortTemp|(u32)(ReadData);

             

              //将PortTemp中的数据先进行预处理

              PortTemp=PortTemp<<(Address*16);

              for(i=4,j=Num*2;j>0;i++,j-=2)

              {

                  CalTemp=(u16)(PortTemp<<16);

                  *(pointer_2+i)=(u8)(CalTemp>>8);//先放高位

                  *(pointer_2+i+1)=(u8)(CalTemp&0x00FF);//再放低位

              }

                 

              //写入校验码                      

              SendKey=CRC16(pointer_2+1,*pointer_2-2);               

              //将计算出来的校验码装入输出数据缓存中

              *(pointer_2+(*pointer_2-1))=(u8)(SendKey>>8);

              *(pointer_2+(*pointer_2))=(u8)(SendKey&0x00FF);

   

              //启动数据发送

              USART_ITConfig(USART1, USART_IT_TC, ENABLE);//开启数据发送中断           

   

           }

           else

           {

               ErrorHandle(3,pointer_2);//错误读取数量

           }     

   

       }

       else

       {

           ErrorHandle(2,pointer_2);//错误起始地址

       }

    }

    else

    {

       Comu_Busy=0;

    }

 }
标记红色的那句老是出现错误,错误是main.c(497): error:  #20: identifier "ADC2" is undefined    ReadData=ADC_GetConversionValue(ADC2);  
是不是我包含的头文件不对,还是什么原因?

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

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-5-30 18:14:29 | 显示全部楼层
你查看一下ADC2的定义。。报错说是无定义。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-5-26
在线时间
0 小时
 楼主| 发表于 2014-5-30 19:44:01 | 显示全部楼层
回复【2楼】Admin:
---------------------------------
ADC2的定义怎么查,小白。完全不懂。
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-5-30 19:55:21 | 显示全部楼层
选中ADC2,右键 go to definition of
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-5-26
在线时间
0 小时
 楼主| 发表于 2014-5-30 20:00:16 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
我选中进入了stm32f37x.h 文件里面定义了好多变量。我在#define ADC1                ((ADC_TypeDef *) ADC1_BASE)的下面添加了#define ADC2                ((ADC_TypeDef *) ADC2_BASE)。可是在主程序中还是出错。是不是我的头文件包含的不对。我的头文件都有这些#include "stm32f37x.h"
#include "stm32f37x_usart.h"
#include "stm32f37x_tim.h"
#include "stm32f37x_adc.h"
#include "stm32f37x_rcc.h"
#include "stm32f37x_gpio.h"
#include "stm32f37x_misc.h"
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-5-26
在线时间
0 小时
 楼主| 发表于 2014-5-30 20:04:16 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
是不是我芯片型号问题?
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-5-26
在线时间
0 小时
 楼主| 发表于 2014-5-31 18:23:33 | 显示全部楼层
怎么没人回复我了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-5-31 22:08:45 | 显示全部楼层
回复【5楼】ycc199198:
---------------------------------
自己定义不太好吧,应该要在C/C++选项卡里面设置才行.
我用f4,是要设置这个:
STM32F40_41xxx

F3看看是不是类似,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 18:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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