zou295 发表于 2020-9-7 15:13

HK32F030C8T6烧录STM32F030C8T6代码后ADC不工作

本帖最后由 zou295 于 2020-9-7 15:23 编辑

之前用的是STM32F030C8T6的MCU,现在想用HK32F030C8T6烧录了STM32F030C8T6的代码后ADC不工作了。请问哪里要做调整的?

智创易达 发表于 2020-9-7 15:19

STM32F030C8T6我这边是ST代理现在还用吗可以给你特价 比市场便宜百分20以上

智创易达 发表于 2020-9-7 15:20

有用到加我QQ 530810461

zou295 发表于 2020-9-7 15:22

智创易达 发表于 2020-9-7 15:20
有用到加我QQ 530810461

有在用量不多每月5K左右。

盾视工作室 发表于 2020-9-8 10:40

例程要修改才行,直接烧用不成

盾视工作室 发表于 2020-9-8 10:49

#include "main.h"
#include "hk32f030m.h"
#include "hk32f030m_gpio.h"
#include <stdio.h>
#include "stdarg.h"
//#include "hk32f030m_pwr.h"
ADC_InitTypeDef ADC_InitStructure;
//USART_InitTypeDef USART_InitStructure;
//NVIC_InitTypeDef    NVIC_InitStructure;
uint32_tADCConvertedValue = {0};
static void GpioInit(void);
float ADCConvertedVoltage = {0};
void RCC_Configuration(void);
void GPIO_Configuration(void);
void ADC_Configuration(void);
//void USART_Configuration(void);
int fputc(int ch, FILE *f);
//void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...);
/*软件延时*/

void delayus(uint32_t i)//延时微秒,有误差自行调整
{
i*=5;//1US
while(i--);
}

void delayms(uint32_t i)//延时毫秒 有误差自行调整
{
delayus(740*i);   //740
}
int main(void)
/* Infinite loop */
{
unsigned char i;
GpioInit();//GPIO函数
uint16_t iTick;//进入睡眠的i++
RCC_Configuration();
GPIO_Configuration();
ADC_Configuration();
//USART_Configuration();

delayms(100);

for(i=0;i<5;i++)//读取5次ADC的值,取最后一次
{
ADC_ChannelConfig(ADC1, ADC_Channel_2 , ADC_SampleTime_55_5Cycles);//读取PC4通道ADC的值
ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET;//将ADC值存入寄存器
ADCConvertedValue =ADC_GetConversionValue(ADC1);//定义该通道ADC的值为ADCConvertedValue
}


for(i=0;i<5;i++)//读取5次ADC的值,取最后一次
   {
    ADC_ChannelConfig(ADC1, ADC_Channel_3 , ADC_SampleTime_55_5Cycles);//读取PD3通道ADC的值
    ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET;
    ADCConvertedValue =ADC_GetConversionValue(ADC1);
   }


for(i=0;i<5;i++)//读取5次ADC的值,取最后一次
   {
       ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_55_5Cycles);//读取PD2通道ADC的值
       ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET;
      ADCConvertedValue =ADC_GetConversionValue(ADC1);
   
    }
delayms(100);


//printf("DC1=%04X \n",ADCConvertedValue);//打印寄存器值
//printf("VCC1=%f V\n",ADCConvertedVoltage);//打印电压
//printf("VCC2=%f V\n",ADCConvertedVoltage);//打印电压
//printf("VCC3=%f V\n",ADCConvertedVoltage);//打印电压


}
}





/*时钟初始化*/
void RCC_Configuration(void)
{
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOD, ENABLE );
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE );
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOC, ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC ,ENABLE);
}
/*LED IO初始化*/
static void GpioInit(void)
{
GPIO_InitTypeDef gpio;


RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
gpio.GPIO_Pin = GPIO_Pin_4;
gpio.GPIO_Mode = GPIO_Mode_OUT;
gpio.GPIO_OType = GPIO_OType_PP;
gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
gpio.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_Init(GPIOD, &gpio);


RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
gpio.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_6 | GPIO_Pin_3;
gpio.GPIO_Mode = GPIO_Mode_OUT;
gpio.GPIO_OType = GPIO_OType_PP;
gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
gpio.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_Init(GPIOC, &gpio);
}
/*ADC IO初始化*/
void GPIO_Configuration(void)
{
//初始化模拟IO PC4 ADC_CH2
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource4,GPIO_AF_7);

//初始化模拟IO PD3 ADC_CH3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource3,GPIO_AF_7);

//初始化模拟IO PD2 ADC_CH4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_7);

// //初始化串口IO
// //PD6,TX
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
//GPIO_Init(GPIOD, &GPIO_InitStructure);
// GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_1);
// //PA3,RX
// GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
//GPIO_Init(GPIOA, &GPIO_InitStructure);
// GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);

}
/*ADC配置*/
void ADC_Configuration(void)
{
ADC_DeInit(ADC1);
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1,&ADC_InitStructure);
/* ADC1 regular channels configuration */
ADC_Cmd(ADC1, ENABLE);

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
ADC_StartOfConversion(ADC1);
}






///*串口配置*/
//void USART_Configuration(void)
//{
// USART_InitStructure.USART_BaudRate = 115200;
//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_SWAPPinCmd(USART1,ENABLE);
// USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//串口发送完成中断
//USART_Cmd(USART1, ENABLE);
//
// NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
// USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
// NVIC_Init(&NVIC_InitStructure);
//
//}
///*printf重定义*/
//int fputc(int ch, FILE *f)
//{
///* 发送一个字节数据到串口 */
//USART_SendData(USART1, (uint8_t) ch);
//
///* 等待发送完毕 */
//while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
//
//return (ch);
//}
///*
// * 函数名:itoa
// * 描述:将整型数据转换成字符串
// * 输入:-radix=10 表示十进制,其他结果为0
//         -value 要转换的整型数
// *         -string 转换后的字符串
// * 输出:无
// * 调用:由USART1_printf()调用
// */
//static char *itoa(int value, char *string, int radix)
//{
//    inti,d;
//    intflag = 0;
//    char *ptr = string;
//   
//    /* 此处仅支持十进制转换 */
//    if(radix != 10)
//    {
//      *ptr = 0;
//      return string;
//    }
//   
//    if(!value)
//    {
//      *ptr++ = 0x30;
//      *ptr = 0;
//      return string;
//    }
//   
//    /* 如果是一个负号,就加上“-”符号 */
//    if(value < 0)
//    {
//      *ptr++ = '-';
//      value *= -1;
//    }
//    for(i=10000; i>0; i/=10)
//    {
//      d = value / i;
//      if(d || flag)
//      {
//            *ptr++ = (char)(d + 0x30);
//            value -= (d * i);
//            flag = 1;
//      }
//    }
//   
//    /* 空终止字符. */
//    *ptr = 0;
//    return string;
//}

///*
// * 函数名:USART1_printf
// * 描述:格式化输出,类似于C 库中的printf,但这里没有用到C库
// * 输入:-USARTx 串口通道,这里只用到了串口1,即USART1
// *         -Data 要发送到串口的内容的指针
// * 输出:无
// * 调用:外部调用
// */
//void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...)
//{
//    const char *s;
//    int d;
//    char buf;
//    va_list ap;
//    va_start(ap,Data);
//    while(*Data != 0)         //判断是否到达字符串结束符
//    {
//      if(*Data == 0x5c)       //'\'
//      {
//            switch(*++Data)
//            {
//                case 'r':       //回车符
//                  USART_SendData(USARTx, 0x0d);
//                  Data++;
//                  break;
//               
//                case 'n':       //换行符
//                  USART_SendData(USARTx, 0x0a);
//                  Data++;
//                  break;
//                default:
//                  Data++;
//                  break;
//            }
//      }
//      else if(*Data == '%')
//      {
//            switch(*++Data)
//            {
//                case 's':       //字符串
//                  s = va_arg(ap, const char *);
//                  for(; *s; s++)
//                  {
//                        USART_SendData(USARTx, *s);
//                        while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
//                  }
//                  Data++;
//                  break;
//                case 'd':       //十进制
//                  d = va_arg(ap, int);
//                  itoa(d, buf, 10);
//                  for(s=buf; *s; s++)
//                  {
//                        USART_SendData(USARTx, *s);
//                        while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
//                  }
//                  Data++;
//                  break;
//                default:
//                  Data++;
//                  break;
//            }
//      }
//      else
//      {
//            USART_SendData(USARTx, *Data++);
//      }
//      while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
//    }
//}


//#ifdefUSE_FULL_ASSERT
///**
//* @briefReports the name of the source file and the source line number
//*         where the assert_param error has occurred.
//* @paramfile: pointer to the source file name
//* @paramline: assert_param error line source number
//* @retval None
//*/
//void assert_failed(uint8_t* file, uint32_t line)
//{
///* User can add his own implementation to report the file name and line number,
//   tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
//}
//#endif /* USE_FULL_ASSERT */

zou295 发表于 2020-9-8 14:44

请问ADC 及DMA和STM32F030的有什么区别,要注意什么?怎么去修改?

annko2005 发表于 2020-9-12 10:24

zou295 发表于 2020-9-8 14:44
请问ADC 及DMA和STM32F030的有什么区别,要注意什么?怎么去修改?

基本差不多,只是小细节要注意一下。具体可以参考我们的应用笔记。

daichaodai 发表于 2020-9-13 17:30

楼主肯定是不能直接拿来用的,要做些小修改。

单片小菜 发表于 2020-9-14 18:21

肯定不能直接拿来用的,需要进行修改的,怎么可能直接就烧录呢?
两个不一样的芯片哦。

名字是啥样 发表于 2020-9-15 09:25

肯定不行呀
芯片型号都不一样,怎么可以呢?

zhouyong77 发表于 2020-9-19 22:27

楼主肯定不能直接用,要修改配置的哈。

智创易达 发表于 2020-9-24 16:49

zou295 发表于 2020-9-7 15:22
有在用量不多每月5K左右。

兄弟你加我QQ了么 530810461 ST的 030C8T6跟航顺的MCU我都很有优势

muyichuan2012 发表于 2020-10-7 12:20

兼容性与GD32和AT32这些大厂比还是要差点。

guijial511 发表于 2020-10-7 17:18

楼主直接把ST的代码拿过来用?

huquanz711 发表于 2020-10-7 17:38

直接拿过来用肯定会有问题哦

名字是啥样 发表于 2020-10-9 11:43

例程要修改才行,直接烧用不成。例程要修改才行,直接烧用不成

heart蓝色CD 发表于 2021-3-1 18:39

annko2005 发表于 2020-9-12 10:24
基本差不多,只是小细节要注意一下。具体可以参考我们的应用笔记。

你好,应用笔记中出现的例程,在哪里可以下载到
页: [1]
查看完整版本: HK32F030C8T6烧录STM32F030C8T6代码后ADC不工作