OpenEdv-开源电子网

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

在网上买的ADS1230模块,上面的例程是基于STM32F103C8T6的,然后我买的是正点原子的NANO板。

[复制链接]

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-4
在线时间
13 小时
发表于 2021-1-4 20:17:32 | 显示全部楼层 |阅读模式
15金钱
非常麻烦原子哥或者路过的大佬可以解答一下,基于STM32F103C8T6的ADS1230例程可以直接下载到STM32F103RBT6的NANO板,串口数据也可以正常发送,但是现在要使模数转换后的值显示在板子上的数码管上,把NANO板的数码管和定时器相关函数移植到这个例程里面,数码管不显示,串口也不输出了,但是程序是正确的,没有错误,已经盯着看了好长时间了
下面这是例程
#include "stm32f10x.h"
#include <stdio.h>
#include "ADS1230.C"
u8 dat;
void RCC_Configuration(void)
{
  ErrorStatus HSEStartUpStatus;                  
  RCC_DeInit();                                    
  RCC_HSEConfig(RCC_HSE_ON);               
  HSEStartUpStatus = RCC_WaitForHSEStartUp();      
  if(HSEStartUpStatus == SUCCESS)                  
  {
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    FLASH_SetLatency(FLASH_Latency_2);                    
             
    RCC_HCLKConfig(RCC_SYSCLK_Div2);               
    RCC_PCLK1Config(RCC_HCLK_Div2);                           
          RCC_PCLK2Config(RCC_HCLK_Div2);               


    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  
    RCC_PLLCmd(ENABLE);                                   

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)   
    {
    }
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);            
    while(RCC_GetSYSCLKSource() != 0x08)               
    {
    }
  }
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE);  
}
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;      
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void NVIC_Configuration(void)
{
   NVIC_InitTypeDef NVIC_InitStructure;
   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

   /* Configure the NVIC Preemption Priority Bits */  
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

   /* Enable the USART1 Interrupt */
   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;      
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                  
   NVIC_Init(&NVIC_InitStructure);                                                   
}
void USART1_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate =19200;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART1, &USART_InitStructure);
        USART_ClearFlag(USART1, USART_FLAG_TC);   
}
void Uart1_PutChar(u8 ch)
{
  USART_SendData(USART1, (u8) ch);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}

void USART1_IRQHandler(void)            
{
                                                                          
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
    dat = USART_ReceiveData(USART1);                            
  }
}

int main(void)
{  u32 ADC_VALUE;
  RCC_Configuration();
  GPIO_Configuration();
  NVIC_Configuration();
  USART1_Configuration();
       
        PDWN_0;
        delayad(20);
        PDWN_1;
  SPEED_0;//SPEED PIN=0,datarate=10SPS(Internal Oscilltor)            
                //SPEED PIN=1,datarate=80SPS(Internal Oscilltor)
        CLKIN_0;
        GAINx64();
        while(1)
     {       
      ADC_VALUE=Read_ADS1230(1);
                        ADC_VALUE&=0X000FFFFF;

                        Uart1_PutChar(0X55);//Front Byte
                        Uart1_PutChar((u8)(ADC_VALUE>>16)&0X0000FF);
                        Uart1_PutChar((u8)(ADC_VALUE>>8)&0X0000FF);  
                        Uart1_PutChar((u8)(ADC_VALUE&0X0000FF));   
                  Uart1_PutChar(0XAA); //Last Byte
                       
                        delayad(2000);//more than
           }
}

下面是移植函数之后的程序
#include "smg.h"
#include "timer.h"
#include "led.h"
#include "delay.h"
#include "sys.h"
#include <stdio.h>
#include "ADS1230.C"
u8 dat;

void RCC_Configuration(void)
{
  ErrorStatus HSEStartUpStatus;                  
  RCC_DeInit();                                    
  RCC_HSEConfig(RCC_HSE_ON);                       
  HSEStartUpStatus = RCC_WaitForHSEStartUp();      
  if(HSEStartUpStatus == SUCCESS)                 
  {
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    FLASH_SetLatency(FLASH_Latency_2);                  
             
    RCC_HCLKConfig(RCC_SYSCLK_Div2);              
    RCC_PCLK1Config(RCC_HCLK_Div2);                         
          RCC_PCLK2Config(RCC_HCLK_Div2);               


    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  
    RCC_PLLCmd(ENABLE);                                 

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)   
    }
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);           
    while(RCC_GetSYSCLKSource() != 0x08)                 
    }
  }
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE);

}

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        //&#182;¨ò&#229;GPIO3&#245;ê&#188;&#187;ˉ&#189;á11ì&#229;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}


void NVIC_Configuration(void)
{
   NVIC_InitTypeDef NVIC_InitStructure;
   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);


   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;      
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                 
   NVIC_Init(&NVIC_InitStructure);                                                
}

void USART1_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate =19200;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART1, &USART_InitStructure);
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
        USART_Cmd(USART1, ENABLE);
    USART_ClearFlag(USART1, USART_FLAG_TC);   
}


void Uart1_PutChar(u8 ch)
{
  USART_SendData(USART1, (u8) ch);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
{
                                                                          
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)   
  {     
    dat = USART_ReceiveData(USART1);                            
  }
}

u8 smg_num[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x01,0x00};
u32 ADC_VALUE;
int main(void)
{
  RCC_Configuration();
  GPIO_Configuration();
  NVIC_Configuration();
  USART1_Configuration();
        LED_SMG_Init();  
        LED_Init();   
        TIM3_Init(19,7199);//2ms&#182;¨ê±&#207;&#212;ê&#190;               
        PDWN_0;
        delayad(20);
        PDWN_1;
  SPEED_0;
        CLKIN_0;

        GAINx64();
         LED_SMG_Init();
        LED_Init();   
        TIM3_Init(19,7199);
        while(1)
     {       
      ADC_VALUE=Read_ADS1230(1);
                        ADC_VALUE&=0X000FFFFF;
                         
                        Uart1_PutChar(0X55);//Front Byte
                        Uart1_PutChar((u8)(ADC_VALUE>>16)&0X0000FF);
                        Uart1_PutChar((u8)(ADC_VALUE>>8)&0X0000FF);  
                        Uart1_PutChar((u8)(ADC_VALUE&0X0000FF));   
                  Uart1_PutChar(0XAA); //Last Byte
                        delayad(2000);//more than
           }
               
}
u8 num,smg_wei=0;
u8 smg_duan=0;
u32 t=0;
long long h,g,f,e,d,c,b,a;
void TIM3_IRQHandler(void)
{
        if(TIM3->SR&0X0001)
        {
                t=ADC_VALUE;
                h=t%10;g=t/10%10;f=t/100%10;e=t/1000%10;d=t/10000%10;c=t/100000%10;b=t/1000000%10;a=t/10000000%10;
                switch(smg_wei)
                {
                   case 0:  num = smg_num[a]; break;
                   case 1:  num =smg_num[b]; break;
                   case 2:  num = smg_num[c]; break;
                   case 3:  num = smg_num[d]; break;
                   case 4:  num = smg_num[e]; break;
                   case 5:  num = smg_num[f]; break;
                   case 6:  num = smg_num[g]; break;
                   case 7:  num = smg_num[h]; break;   
           }
               
           LED_Write_Data(num,smg_wei);
           LED_Refresh();
           smg_wei++;
           if(smg_wei==8) smg_wei=0;
               
                }                                                                                                               
                                  
        TIM3->SR&=~(1<<0);
}

最佳答案

查看完整内容[请看2#楼]

复位一下就可以显示了,IO口应该是一样的,就是不知道哪里出现问题了,不能直接运行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-4
在线时间
13 小时
 楼主| 发表于 2021-1-4 20:17:33 | 显示全部楼层
511386807 发表于 2021-1-5 11:20
看看使用的IO口是否一样

复位一下就可以显示了,IO口应该是一样的,就是不知道哪里出现问题了,不能直接运行
回复

使用道具 举报

9

主题

249

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1286
金钱
1286
注册时间
2014-11-25
在线时间
180 小时
发表于 2021-1-5 11:09:47 | 显示全部楼层
LED_Write_Data(num,smg_wei);
LED_Refresh();
这俩函数都没有,怎么分析,LED驱动初始化也看不到
回复

使用道具 举报

2

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
679
金钱
679
注册时间
2020-11-21
在线时间
67 小时
发表于 2021-1-5 11:20:23 | 显示全部楼层
看看使用的IO口是否一样
回复

使用道具 举报

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-4
在线时间
13 小时
 楼主| 发表于 2021-1-5 12:17:03 | 显示全部楼层
godark 发表于 2021-1-5 11:09
LED_Write_Data(num,smg_wei);
LED_Refresh();
这俩函数都没有,怎么分析,LED驱动初始化也看不到

抱歉,这是这两个函数,乱码的是注释,直接忽略就好,然后发现只要复位一下就可以运行了
void LED_SMG_Init(void)
{

   RCC->APB2ENR|=1<<3;    //ê1&#196;üPORTBê±&#214;ó         
   RCC->APB2ENR|=1<<4;    //ê1&#196;üPORTCê±&#214;ó
   RCC->APB2ENR|=1<<0;    //ê1&#196;üAFIOê±&#214;ó
   
   JTAG_Set(SWD_ENABLE);//1&#216;±&#213;jtag£&#172;ê1&#196;üSWD£&#172;&#191;éò&#212;ó&#195;SWD&#196;£ê&#189;μ÷ê&#212; PB4×&#246;&#198;&#213;í¨IO&#191;úê1ó&#195;,·&#241;&#212;ò2&#187;&#196;üμ±IOê1ó&#195;
   
   GPIOB->CRL&=0XFF000FFF;
   GPIOB->CRL|=0X00333000;//PB3~5í&#198;íìê&#228;3&#246;
   
   GPIOC->CRH&=0XFFF000FF;
   GPIOC->CRH|=0X00033300;//PC10~12í&#198;íìê&#228;3&#246;  
           
   GPIOB->BRR = 1<<3|1<<5;
   GPIOB->BSRR = 1<<4;
   GPIOC->BSRR = 1<<10|1<<11|1<<12;
   
}
//74HC138&#199;y&#182;ˉ
//êy&#194;&#235;1ü&#206;&#187;&#209;&#161;
//num:òa&#207;&#212;ê&#190;μ&#196;êy&#194;&#235;1ü±ào&#197; 0-7(128&#184;&#246;êy&#194;&#235;1ü)
void LED_Wei(u8 num)
{
    LED_A0=num&0x01;
        LED_A1=(num&0x02)>>1;
        LED_A2=(num&0x04)>>2;
}
//74HC595&#199;y&#182;ˉ
//êy&#194;&#235;1ü&#207;&#212;ê&#190;
//duan:&#207;&#212;ê&#190;μ&#196;&#182;&#206;&#194;&#235;
//wei:òa&#207;&#212;ê&#190;μ&#196;êy&#194;&#235;1ü±ào&#197; 0-7(128&#184;&#246;êy&#194;&#235;1ü)
void LED_Write_Data(u8 duan,u8 wei)
{
        u8 i;
        for( i=0;i<8;i++)//&#207;è&#203;í&#182;&#206;
        {
                LED_DS=(duan>>i)&0x01;
                LED_SCK=0;
                delay_us(5);
                LED_SCK=1;
        }
    LED_Wei(wei);//oó&#209;&#161;&#214;D&#206;&#187;
}
//74HC595&#199;y&#182;ˉ
//êy&#194;&#235;1ü&#203;¢D&#194;&#207;&#212;ê&#190;
void LED_Refresh(void)
{
        LED_LCLK=1;
        delay_us(5);
        LED_LCLK=0;
}
回复

使用道具 举报

9

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-4
在线时间
13 小时
 楼主| 发表于 2021-1-5 12:20:25 | 显示全部楼层
起个昵称都难 发表于 2021-1-5 12:17
抱歉,这是这两个函数,乱码的是注释,直接忽略就好,然后发现只要复位一下就可以运行了
void LED_SMG_I ...

这是LED初始化函数
void LED_Init(void)
{
         RCC->APB2ENR|=1<<4;    //ê1&#196;üPORTCê±&#214;ó          
         GPIOC->CRL&=0X00000000;
         GPIOC->CRL|=0X33333333;//PC0~7í&#198;íìê&#228;3&#246;                  
     GPIOC->ODR|=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7);//PC.0~7 ê&#228;3&#246;&#184;&#223;μ&#231;&#198;&#189;
}
回复

使用道具 举报

3

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2020-6-27
在线时间
23 小时
发表于 2022-6-14 15:08:58 | 显示全部楼层
楼主可以分享下STM32F103C8T6 ADS1230的例程吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 23:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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