找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 215|回复: 4
收起左侧

大家好,我想请教一下关于STM32F103VE工程文件移植到STM32F103C8工程遇到的问题

[复制链接]
ID:1076325 发表于 2024-4-12 13:56 | 显示全部楼层 |阅读模式
这是usart.c和usart.h代码:
  1. #include "usart.h"

  2. /**
  3.   * @brief  配置嵌套向量中断控制器NVIC
  4.   * @param  无
  5.   * @retval 无
  6.   */
  7. static void NVIC_Configuration(void)
  8. {
  9.   NVIC_InitTypeDef NVIC_InitStructure;
  10.   
  11.   /* 嵌套向量中断控制器组选择 */
  12.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  13.   
  14.   /* 配置USART为中断源 */
  15.   NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
  16.   /* 抢断优先级*/
  17.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  18.   /* 子优先级 */
  19.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  20.   /* 使能中断 */
  21.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  22.   /* 初始化配置NVIC */
  23.   NVIC_Init(&NVIC_InitStructure);
  24. }

  25. /**
  26.   * @brief  USART GPIO 配置,工作参数配置
  27.   * @param  无
  28.   * @retval 无
  29.   */
  30. void USART_Config(void)
  31. {
  32.         GPIO_InitTypeDef GPIO_InitStructure;
  33.         USART_InitTypeDef USART_InitStructure;

  34.         // 打开串口GPIO的时钟
  35.         DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
  36.        
  37.         // 打开串口外设的时钟
  38.         DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

  39.         // 将USART Tx的GPIO配置为推挽复用模式
  40.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
  41.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  42.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  43.         GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  44.   // 将USART Rx的GPIO配置为浮空输入模式
  45.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
  46.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  47.         GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
  48.        
  49.         // 配置串口的工作参数
  50.         // 配置波特率
  51.         USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
  52.         // 配置 针数据字长
  53.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  54.         // 配置停止位
  55.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  56.         // 配置校验位
  57.         USART_InitStructure.USART_Parity = USART_Parity_No ;
  58.         // 配置硬件流控制
  59.         USART_InitStructure.USART_HardwareFlowControl =
  60.         USART_HardwareFlowControl_None;
  61.         // 配置工作模式,收发一起
  62.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  63.         // 完成串口的初始化配置
  64.         USART_Init(DEBUG_USARTx, &USART_InitStructure);
  65.        
  66.         // 串口中断优先级配置
  67.         NVIC_Configuration();
  68.        
  69.         // 使能串口接收中断
  70.         USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);       
  71.        
  72.         // 使能串口
  73.         USART_Cmd(DEBUG_USARTx, ENABLE);            
  74. }

  75. /*****************  发送一个字节 **********************/
  76. void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
  77. {
  78.         /* 发送一个字节数据到USART */
  79.         USART_SendData(pUSARTx,ch);
  80.                
  81.         /* 等待发送数据寄存器为空 */
  82.         while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
  83. }

  84. /****************** 发送8位的数组 ************************/
  85. void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num)
  86. {
  87.   uint8_t i;
  88.        
  89.         for(i=0; i<num; i++)
  90.   {
  91.             /* 发送一个字节数据到USART */
  92.             Usart_SendByte(pUSARTx,array[i]);       
  93.   
  94.   }
  95.         /* 等待发送完成 */
  96.         while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
  97. }

  98. /*****************  发送字符串 **********************/
  99. void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
  100. {
  101.         unsigned int k=0;
  102.   do
  103.   {
  104.       Usart_SendByte( pUSARTx, *(str + k) );
  105.       k++;
  106.   } while(*(str + k)!='\0');
  107.   
  108.   /* 等待发送完成 */
  109.   while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
  110.   {}
  111. }

  112. /*****************  发送一个16位数 **********************/
  113. void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
  114. {
  115.         uint8_t temp_h, temp_l;
  116.        
  117.         /* 取出高八位 */
  118.         temp_h = (ch&0XFF00)>>8;
  119.         /* 取出低八位 */
  120.         temp_l = ch&0XFF;
  121.        
  122.         /* 发送高八位 */
  123.         USART_SendData(pUSARTx,temp_h);       
  124.         while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
  125.        
  126.         /* 发送低八位 */
  127.         USART_SendData(pUSARTx,temp_l);       
  128.         while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
  129. }

  130. ///重定向c库函数printf到串口,重定向后可使用printf函数
  131. int fputc(int ch, FILE *f)
  132. {
  133.                 /* 发送一个字节数据到串口 */
  134.                 USART_SendData(DEBUG_USARTx, (uint8_t) ch);
  135.                
  136.                 /* 等待发送完毕 */
  137.                 while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);               
  138.        
  139.                 return (ch);
  140. }

  141. ///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
  142. int fgetc(FILE *f)
  143. {
  144.                 /* 等待串口输入数据 */
  145.                 while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);

  146.                 return (int)USART_ReceiveData(DEBUG_USARTx);
  147. }

复制代码
  1. #ifndef __USART_H
  2. #define        __USART_H


  3. #include "stm32f10x.h"
  4. #include <stdio.h>

  5. /**
  6.   * 串口宏定义,不同的串口挂载的总线和IO不一样,移植时需要修改这几个宏
  7.         * 1-修改总线时钟的宏,uart1挂载到apb2总线,其他uart挂载到apb1总线
  8.         * 2-修改GPIO的宏
  9.   */
  10.        
  11. // 串口1-USART1
  12. #define  DEBUG_USARTx                   USART1
  13. #define  DEBUG_USART_CLK                RCC_APB2Periph_USART1
  14. #define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd
  15. #define  DEBUG_USART_BAUDRATE           115200

  16. // USART GPIO 引脚宏定义
  17. #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
  18. #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
  19.    
  20. #define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
  21. #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9
  22. #define  DEBUG_USART_RX_GPIO_PORT       GPIOA
  23. #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10

  24. #define  DEBUG_USART_IRQ                USART1_IRQn
  25. #define  DEBUG_USART_IRQHandler         USART1_IRQHandler


  26. // 串口2-USART2
  27. //#define  DEBUG_USARTx                   USART2
  28. //#define  DEBUG_USART_CLK                RCC_APB1Periph_USART2
  29. //#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
  30. //#define  DEBUG_USART_BAUDRATE           115200

  31. //// USART GPIO 引脚宏定义
  32. //#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
  33. //#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
  34. //   
  35. //#define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
  36. //#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_2
  37. //#define  DEBUG_USART_RX_GPIO_PORT       GPIOA
  38. //#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_3

  39. //#define  DEBUG_USART_IRQ                USART2_IRQn
  40. //#define  DEBUG_USART_IRQHandler         USART2_IRQHandler

  41. // 串口3-USART3
  42. //#define  DEBUG_USARTx                   USART3
  43. //#define  DEBUG_USART_CLK                RCC_APB1Periph_USART3
  44. //#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
  45. //#define  DEBUG_USART_BAUDRATE           115200

  46. //// USART GPIO 引脚宏定义
  47. //#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOB)
  48. //#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
  49. //   
  50. //#define  DEBUG_USART_TX_GPIO_PORT       GPIOB   
  51. //#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10
  52. //#define  DEBUG_USART_RX_GPIO_PORT       GPIOB
  53. //#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11

  54. //#define  DEBUG_USART_IRQ                USART3_IRQn
  55. //#define  DEBUG_USART_IRQHandler         USART3_IRQHandler

  56. // 串口4-UART4
  57. //#define  DEBUG_USARTx                   UART4
  58. //#define  DEBUG_USART_CLK                RCC_APB1Periph_UART4
  59. //#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
  60. //#define  DEBUG_USART_BAUDRATE           115200

  61. //// USART GPIO 引脚宏定义
  62. //#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC)
  63. //#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
  64. //   
  65. //#define  DEBUG_USART_TX_GPIO_PORT       GPIOC   
  66. //#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10
  67. //#define  DEBUG_USART_RX_GPIO_PORT       GPIOC
  68. //#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11

  69. //#define  DEBUG_USART_IRQ                UART4_IRQn
  70. //#define  DEBUG_USART_IRQHandler         UART4_IRQHandler


  71. // 串口5-UART5
  72. //#define  DEBUG_USARTx                   UART5
  73. //#define  DEBUG_USART_CLK                RCC_APB1Periph_UART5
  74. //#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
  75. //#define  DEBUG_USART_BAUDRATE           115200

  76. //// USART GPIO 引脚宏定义
  77. //#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD)
  78. //#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
  79. //   
  80. //#define  DEBUG_USART_TX_GPIO_PORT       GPIOC   
  81. //#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_12
  82. //#define  DEBUG_USART_RX_GPIO_PORT       GPIOD
  83. //#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_2

  84. //#define  DEBUG_USART_IRQ                UART5_IRQn
  85. //#define  DEBUG_USART_IRQHandler         UART5_IRQHandler


  86. void USART_Config(void);
  87. void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
  88. void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
  89. void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);


  90. #endif /* __USART_H */
复制代码
这是我移植usart.c文件遇到的错误编译提示:

Build target 'LED'
compiling usart.c...
..\USER\usart.c(35): error:  #20: identifier "USART_InitTypeDef" is undefined
        USART_InitTypeDef USART_InitStructure;
..\USER\usart.c(58): error:  #20: identifier "USART_WordLength_8b" is undefined
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
..\USER\usart.c(60): error:  #20: identifier "USART_StopBits_1" is undefined
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
..\USER\usart.c(62): error:  #20: identifier "USART_Parity_No" is undefined
        USART_InitStructure.USART_Parity = USART_Parity_No ;
..\USER\usart.c(65): error:  #20: identifier "USART_HardwareFlowControl_None" is undefined
        USART_HardwareFlowControl_None;
..\USER\usart.c(67): error:  #20: identifier "USART_Mode_Rx" is undefined
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
..\USER\usart.c(67): error:  #20: identifier "USART_Mode_Tx" is undefined
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
..\USER\usart.c(69): warning:  #223-D: function "USART_Init" declared implicitly
        USART_Init(DEBUG_USARTx, &USART_InitStructure);
..\USER\usart.c(75): warning:  #223-D: function "USART_ITConfig" declared implicitly
        USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);   
..\USER\usart.c(75): error:  #20: identifier "USART_IT_RXNE" is undefined
        USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);   
..\USER\usart.c(78): warning:  #223-D: function "USART_Cmd" declared implicitly
        USART_Cmd(DEBUG_USARTx, ENABLE);            
..\USER\usart.c(85): warning:  #223-D: function "USART_SendData" declared implicitly
        USART_SendData(pUSARTx,ch);
..\USER\usart.c(88): warning:  #223-D: function "USART_GetFlagStatus" declared implicitly
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);  
..\USER\usart.c(88): error:  #20: identifier "USART_FLAG_TXE" is undefined
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);  
..\USER\usart.c(103): warning:  #223-D: function "USART_GetFlagStatus" declared implicitly
        while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
..\USER\usart.c(103): error:  #20: identifier "USART_FLAG_TC" is undefined
        while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
..\USER\usart.c(117): warning:  #223-D: function "USART_GetFlagStatus" declared implicitly
    while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
..\USER\usart.c(117): error:  #20: identifier "USART_FLAG_TC" is undefined
    while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
..\USER\usart.c(132): warning:  #223-D: function "USART_SendData" declared implicitly
        USART_SendData(pUSARTx,temp_h);
..\USER\usart.c(133): warning:  #223-D: function "USART_GetFlagStatus" declared implicitly
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
..\USER\usart.c(133): error:  #20: identifier "USART_FLAG_TXE" is undefined
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
..\USER\usart.c(144): warning:  #223-D: function "USART_SendData" declared implicitly
                USART_SendData(DEBUG_USARTx, (uint8_t) ch);
..\USER\usart.c(147): warning:  #223-D: function "USART_GetFlagStatus" declared implicitly
                while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);            
..\USER\usart.c(147): error:  #20: identifier "USART_FLAG_TXE" is undefined
                while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);            
..\USER\usart.c(156): warning:  #223-D: function "USART_GetFlagStatus" declared implicitly
                while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
..\USER\usart.c(156): error:  #20: identifier "USART_FLAG_RXNE" is undefined
                while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
..\USER\usart.c(158): warning:  #223-D: function "USART_ReceiveData" declared implicitly
                return (int)USART_ReceiveData(DEBUG_USARTx);
..\USER\usart.c: 13 warnings, 14 errors
".\Obj\Project.axf" - 14 Error(s), 13 Warning(s).
Target not created.
Build Time Elapsed:  00:00:00

回复

使用道具 举报

ID:883242 发表于 2024-4-12 15:31 | 显示全部楼层
问题是你改动了什么???

先把VE工程编译通过,然后在工程文件里面把单片机型号改成C8,不可能有这么多错误,你一定是做了很多很多余且毫无意义的工作。
回复

使用道具 举报

ID:1096929 发表于 2024-4-12 20:07 | 显示全部楼层
引脚数是对的吧 其实你可以pin对pin的
回复

使用道具 举报

ID:1000679 发表于 2024-4-12 21:34 | 显示全部楼层
提示很清楚,有那么多未定义的函数。 未定义或是未include 相关.h。还有就是编译设置那里有没有选择做了定义的文件路径。
回复

使用道具 举报

ID:883242 发表于 2024-4-13 21:30 | 显示全部楼层
bingbingbom 发表于 2024-4-12 21:34
提示很清楚,有那么多未定义的函数。 未定义或是未include 相关.h。还有就是编译设置那里有没有选择做了定 ...

既然VE能成功,文件路径肯定是对的,楼主一定是做了不应该做的工作。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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