搜索

HK32F030C8T6烧录STM32F030C8T6代码后ADC不工作

[复制链接]
416|13
 楼主 | 2020-9-7 15:13 | 显示全部楼层 |阅读模式
本帖最后由 zou295 于 2020-9-7 15:23 编辑

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

使用特权

评论回复

评论

Zxw04040 2020-9-15 11:43 回复TA
你好 我司有代理一款CKS-中科芯的国产MCU,是在不需要改版和改程序的情况下PinToPin完美兼容 替换方便 fae支持 原厂实力强大,个别性能(静电、功耗、脉冲群、高低温) 优于同类产品,103系列USB功能可以正常使用进行固件升级,并且有比ST低35-40个点左右的价格优势 我们可以免费提供样给您实测,张:17673484046 微信 
| 2020-9-7 15:19 | 显示全部楼层
STM32F030C8T6  我这边是ST代理  现在还用吗  可以给你特价 比市场便宜百分20以上

使用特权

评论回复
| 2020-9-7 15:20 | 显示全部楼层
有用到加我QQ 530810461

使用特权

评论回复
 楼主 | 2020-9-7 15:22 | 显示全部楼层
智创易达 发表于 2020-9-7 15:20
有用到加我QQ 530810461

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

使用特权

评论回复
| 2020-9-8 10:40 | 显示全部楼层
例程要修改才行,直接烧用不成

使用特权

评论回复
| 2020-9-8 10:49 | 显示全部楼层
  1. #include "main.h"
  2. #include "hk32f030m.h"
  3. #include "hk32f030m_gpio.h"
  4. #include <stdio.h>
  5. #include "stdarg.h"
  6. //#include "hk32f030m_pwr.h"
  7. ADC_InitTypeDef ADC_InitStructure;
  8. //USART_InitTypeDef USART_InitStructure;
  9. //NVIC_InitTypeDef    NVIC_InitStructure;
  10. uint32_t  ADCConvertedValue[3] = {0};
  11. static void GpioInit(void);
  12. float ADCConvertedVoltage[3] = {0};
  13. void RCC_Configuration(void);
  14. void GPIO_Configuration(void);
  15. void ADC_Configuration(void);
  16. //void USART_Configuration(void);
  17. int fputc(int ch, FILE *f);
  18. //void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...);
  19. /*软件延时*/

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

  25. void delayms(uint32_t i)//延时毫秒 有误差自行调整
  26. {
  27.   delayus(740*i);   //740
  28. }
  29. int main(void)
  30.   /* Infinite loop */
  31. {
  32. unsigned char i;
  33. GpioInit();//GPIO函数
  34.   uint16_t iTick;//进入睡眠的i++
  35. RCC_Configuration();
  36. GPIO_Configuration();
  37. ADC_Configuration();
  38. //USART_Configuration();

  39. delayms(100);

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

  46.   
  47.   for(i=0;i<5;i++)//读取5次ADC的值,取最后一次
  48.    {
  49.     ADC_ChannelConfig(ADC1, ADC_Channel_3 , ADC_SampleTime_55_5Cycles);//读取PD3通道ADC的值
  50.     ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET;
  51.     ADCConvertedValue[1] =ADC_GetConversionValue(ADC1);
  52.    }


  53.   for(i=0;i<5;i++)//读取5次ADC的值,取最后一次
  54.      {
  55.        ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_55_5Cycles);//读取PD2通道ADC的值
  56.        ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET;
  57.       ADCConvertedValue[2] =ADC_GetConversionValue(ADC1);
  58.    
  59.     }
  60.   delayms(100);
  61.   
  62.   
  63. //printf("DC1=%04X \n",ADCConvertedValue[0]);//打印寄存器值
  64. //printf("VCC1=%f V\n",ADCConvertedVoltage[0]);//打印电压
  65. //printf("VCC2=%f V\n",ADCConvertedVoltage[1]);//打印电压
  66. //printf("VCC3=%f V\n",ADCConvertedVoltage[2]);//打印电压

  67.   
  68.   }
  69. }





  70. /*时钟初始化*/
  71. void RCC_Configuration(void)
  72. {
  73. RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOD, ENABLE );
  74. RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE );
  75. RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOC, ENABLE );
  76. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  77. RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC ,ENABLE);
  78. }
  79. /*LED IO初始化*/
  80. static void GpioInit(void)
  81. {
  82. GPIO_InitTypeDef gpio;


  83. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
  84. gpio.GPIO_Pin = GPIO_Pin_4;
  85. gpio.GPIO_Mode = GPIO_Mode_OUT;
  86. gpio.GPIO_OType = GPIO_OType_PP;
  87. gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
  88. gpio.GPIO_Speed = GPIO_Speed_Level_3;
  89. GPIO_Init(GPIOD, &gpio);


  90. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
  91. gpio.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_6 | GPIO_Pin_3;
  92. gpio.GPIO_Mode = GPIO_Mode_OUT;
  93. gpio.GPIO_OType = GPIO_OType_PP;
  94. gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
  95. gpio.GPIO_Speed = GPIO_Speed_Level_3;
  96. GPIO_Init(GPIOC, &gpio);
  97. }
  98. /*ADC IO初始化*/
  99. void GPIO_Configuration(void)
  100. {
  101. //初始化模拟IO PC4 ADC_CH2
  102. GPIO_InitTypeDef GPIO_InitStructure;
  103.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 ;
  104.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  105. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  106.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  107. GPIO_PinAFConfig(GPIOC,GPIO_PinSource4,GPIO_AF_7);

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

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

  120. // //初始化串口IO
  121. // //PD6,TX
  122. // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  123. //  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  124. // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  125. //  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  126. //  GPIO_Init(GPIOD, &GPIO_InitStructure);
  127. // GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_1);
  128. // //PA3,RX
  129. // GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;
  130. // GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  131. //  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  132. //  GPIO_Init(GPIOA, &GPIO_InitStructure);
  133. // GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);

  134. }
  135. /*ADC配置*/
  136. void ADC_Configuration(void)
  137. {
  138. ADC_DeInit(ADC1);
  139. ADC_StructInit(&ADC_InitStructure);
  140.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  141.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
  142.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  143. ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
  144.   ADC_Init(ADC1,&ADC_InitStructure);
  145.   /* ADC1 regular channels configuration */
  146.   ADC_Cmd(ADC1, ENABLE);

  147. while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
  148. ADC_StartOfConversion(ADC1);
  149. }






  150. ///*串口配置*/
  151. //void USART_Configuration(void)
  152. //{
  153. // USART_InitStructure.USART_BaudRate = 115200;
  154. //  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  155. //  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  156. //  USART_InitStructure.USART_Parity = USART_Parity_No;
  157. //  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  158. //  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  159. // USART_Init(USART1, &USART_InitStructure);
  160. // USART_SWAPPinCmd(USART1,ENABLE);
  161. // USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//串口发送完成中断
  162. //  USART_Cmd(USART1, ENABLE);
  163. //
  164. // NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  165. // NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
  166. // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  167. // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  168. // USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
  169. // NVIC_Init(&NVIC_InitStructure);
  170. //
  171. //}
  172. ///*printf重定义*/
  173. //int fputc(int ch, FILE *f)
  174. //{
  175. //  /* 发送一个字节数据到串口 */
  176. //  USART_SendData(USART1, (uint8_t) ch);
  177. //  
  178. //  /* 等待发送完毕 */
  179. //  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  
  180. //
  181. //  return (ch);
  182. //}
  183. ///*
  184. // * 函数名:itoa
  185. // * 描述  :将整型数据转换成字符串
  186. // * 输入  :-radix=10 表示十进制,其他结果为0
  187. //           -value 要转换的整型数
  188. // *         -string 转换后的字符串
  189. // * 输出  :无
  190. // * 调用  :由USART1_printf()调用
  191. // */
  192. //static char *itoa(int value, char *string, int radix)
  193. //{
  194. //    int  i,d;
  195. //    int  flag = 0;
  196. //    char *ptr = string;
  197. //   
  198. //    /* 此处仅支持十进制转换 */
  199. //    if(radix != 10)
  200. //    {
  201. //        *ptr = 0;
  202. //        return string;
  203. //    }
  204. //   
  205. //    if(!value)
  206. //    {
  207. //        *ptr++ = 0x30;
  208. //        *ptr = 0;
  209. //        return string;
  210. //    }
  211. //   
  212. //    /* 如果是一个负号,就加上“-”符号 */
  213. //    if(value < 0)
  214. //    {
  215. //        *ptr++ = '-';
  216. //        value *= -1;
  217. //    }
  218. //    for(i=10000; i>0; i/=10)
  219. //    {
  220. //        d = value / i;
  221. //        if(d || flag)
  222. //        {
  223. //            *ptr++ = (char)(d + 0x30);
  224. //            value -= (d * i);
  225. //            flag = 1;
  226. //        }
  227. //    }
  228. //   
  229. //    /* 空终止字符. */
  230. //    *ptr = 0;
  231. //    return string;
  232. //}

  233. ///*
  234. // * 函数名:USART1_printf
  235. // * 描述  :格式化输出,类似于C 库中的printf,但这里没有用到C库
  236. // * 输入  :-USARTx 串口通道,这里只用到了串口1,即USART1
  237. // *         -Data 要发送到串口的内容的指针
  238. // * 输出  :无
  239. // * 调用  :外部调用
  240. // */
  241. //void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...)
  242. //{
  243. //    const char *s;
  244. //    int d;
  245. //    char buf[16];
  246. //    va_list ap;
  247. //    va_start(ap,Data);
  248. //    while(*Data != 0)           //判断是否到达字符串结束符
  249. //    {
  250. //        if(*Data == 0x5c)       //'\'
  251. //        {
  252. //            switch(*++Data)
  253. //            {
  254. //                case 'r':       //回车符
  255. //                    USART_SendData(USARTx, 0x0d);
  256. //                    Data++;
  257. //                    break;
  258. //               
  259. //                case 'n':       //换行符
  260. //                    USART_SendData(USARTx, 0x0a);
  261. //                    Data++;
  262. //                    break;
  263. //                default:
  264. //                    Data++;
  265. //                    break;
  266. //            }
  267. //        }
  268. //        else if(*Data == '%')
  269. //        {
  270. //            switch(*++Data)
  271. //            {
  272. //                case 's':       //字符串
  273. //                    s = va_arg(ap, const char *);
  274. //                    for(; *s; s++)
  275. //                    {
  276. //                        USART_SendData(USARTx, *s);
  277. //                        while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
  278. //                    }
  279. //                    Data++;
  280. //                    break;
  281. //                case 'd':       //十进制
  282. //                    d = va_arg(ap, int);
  283. //                    itoa(d, buf, 10);
  284. //                    for(s=buf; *s; s++)
  285. //                    {
  286. //                        USART_SendData(USARTx, *s);
  287. //                        while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
  288. //                    }
  289. //                    Data++;
  290. //                    break;
  291. //                default:
  292. //                    Data++;
  293. //                    break;
  294. //            }
  295. //        }
  296. //        else
  297. //        {
  298. //            USART_SendData(USARTx, *Data++);
  299. //        }
  300. //        while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
  301. //    }
  302. //}


  303. //#ifdef  USE_FULL_ASSERT
  304. ///**
  305. //  * [url=home.php?mod=space&uid=247401]@brief[/url]  Reports the name of the source file and the source line number
  306. //  *         where the assert_param error has occurred.
  307. //  * @param  file: pointer to the source file name
  308. //  * @param  line: assert_param error line source number
  309. //  * @retval None
  310. //  */
  311. //void assert_failed(uint8_t* file, uint32_t line)
  312. //{
  313. //  /* User can add his own implementation to report the file name and line number,
  314. //     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  315. //}
  316. //#endif /* USE_FULL_ASSERT */
复制代码

使用特权

评论回复
 楼主 | 2020-9-8 14:44 | 显示全部楼层
请问ADC 及DMA和STM32F030的有什么区别,要注意什么?怎么去修改?

使用特权

评论回复
| 2020-9-12 10:24 | 显示全部楼层
zou295 发表于 2020-9-8 14:44
请问ADC 及DMA和STM32F030的有什么区别,要注意什么?怎么去修改?

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

HK32F030_F031_F04A应用笔记V1.0.28.pdf

1017.68 KB, 下载次数: 28

使用特权

评论回复
| 2020-9-13 17:30 | 显示全部楼层
楼主肯定是不能直接拿来用的,要做些小修改。

使用特权

评论回复
| 2020-9-14 18:21 | 显示全部楼层
肯定不能直接拿来用的,需要进行修改的,怎么可能直接就烧录呢?
两个不一样的芯片哦。

使用特权

评论回复
| 2020-9-15 09:25 | 显示全部楼层
肯定不行呀
芯片型号都不一样,怎么可以呢?

使用特权

评论回复
| 2020-9-18 09:31 | 显示全部楼层
可以加我13902238970

使用特权

评论回复
| 2020-9-19 22:27 | 显示全部楼层
楼主肯定不能直接用,要修改配置的哈。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表