野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10839|回复: 10

串口通信,有一个参数显示没有定义,但是光盘自带的不报错

[复制链接]
发表于 2016-11-9 02:14:36 | 显示全部楼层 |阅读模式
求解答
bsp_usart.c文件中
void Usart_SendByte(USART_TypeDef * pUSARTx, uint8_t data)
{
回复

使用道具 举报

 楼主| 发表于 2016-11-9 02:17:47 | 显示全部楼层
bsp_usart.c文件中
void Usart_SendByte(USART_TypeDef * pUSARTx, uint8_t data)
{
        USART_SendData(pUSARTx, data);
        while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
}
编译过程中显示参数“pUSARTx”没定义,我看光盘带的程序也没定义,但是没报错,我编译的时候为什么报错呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 02:18:46 | 显示全部楼层
..\user\main.c(11): error:  #20: identifier "pUSARTx" is undefined
        Usart_SendByte(pUSARTx,100);
..\user\main.c: 0 warnings, 1 error
".\Objects\binghuo.axf" - 1 Error(s), 0 Warning(s).
这是报错的提示
回复 支持 反对

使用道具 举报

发表于 2016-11-9 15:44:01 | 显示全部楼层
这个是输入参数啊,只能在函数内部使用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 17:26:55 | 显示全部楼层
flyleaf 发表于 2016-11-9 15:44
这个是输入参数啊,只能在函数内部使用

我看视频上说void Usart_SendByte(USART_TypeDef * pUSARTx, uint8_t data)中的USARTx前加一个p表示指针,我查了资料的确是这样,pUSARTx表示指向USARTx的地址。代码我是跟着视频敲的,查了好几遍,都一样,当我把这个函数用到main函数中的时候,为什么报错的是把pUSARTx当做一个整体,认为是参数呢?为什么不能直接用USARTx呢?代码我都传到楼下了,请帮我看看好吗?真心求教,谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 17:27:56 | 显示全部楼层
头文件bsp_usart.h

  1. #ifndef _BSP_USART_H
  2. #define _BSP_USART_H
  3. #include "stm32f10x.h"
  4. #include <stdio.h>
  5. #define DEBUG_USART1     1

  6. // 串口1-USART1
  7. #define  DEBUG_USARTx                   USART1
  8. #define  DEBUG_USART_CLK                RCC_APB2Periph_USART1
  9. #define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd
  10. #define  DEBUG_USART_BAUDRATE           115200

  11. // USART GPIO 引脚宏定义
  12. #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
  13. #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd //一个量定义成两个不同的宏?
  14.    
  15. #define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
  16. #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9
  17. #define  DEBUG_USART_RX_GPIO_PORT       GPIOA
  18. #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10

  19. #define  DEBUG_USART_IRQ                USART1_IRQn
  20. #define  DEBUG_USART_IRQHandler         USART1_IRQHandler

  21. void USART_Config(void);
  22. void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data);

  23. #endif /*_BSP_USART_H*/
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 17:30:29 | 显示全部楼层
  1. bsp_usart.c文件

  2. #include "bsp_usart.h"


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

  21. void USART_Config(void)
  22. {
  23.         GPIO_InitTypeDef GPIO_InitStructure;
  24.         USART_InitTypeDef USART_InitStructure;

  25.         // 打开串口GPIO的时钟
  26.         DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
  27.        
  28.         // 打开串口外设的时钟
  29.         DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

  30.         // 将USART Tx的GPIO配置为推挽复用模式
  31.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
  32.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  33.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  34.         GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

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

  65. //void Usart_SendByte(USART_TypeDef* pUSARTx,uint8_t data)
  66. //{
  67. //        USART_SendData(pUSARTx,data);//发送函数
  68. //        while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE)==RESET);//RESET = 0
  69. //}
  70.        
  71. void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data)
  72. {
  73.         USART_SendData(pUSARTx, data);
  74.         while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
  75. }

复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 17:31:29 | 显示全部楼层
main.c

  1. #include "stm32f10x.h"  //相当于51单片机中的#include<reg51.h>
  2. #include "bsp_led.h"
  3. #include "bsp_usart.h"



  4. int main(void)
  5. {
  6. //        USART_TypeDef* pUSARTx;
  7.   USART_Config();
  8.        
  9.         Usart_SendByte(pUSARTx,100);
  10.        
  11.         while(1);
  12. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 17:35:39 | 显示全部楼层
本帖最后由 凌寒子 于 2016-11-9 17:39 编辑

报错
C:\Users\MSI\Desktop
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 17:38:51 | 显示全部楼层
报错的提示
捕获.PNG


回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 19:28:39 | 显示全部楼层
flyleaf 发表于 2016-11-9 15:44
这个是输入参数啊,只能在函数内部使用

我似乎知道哪里错了,pUSARTx指向USARTx地址,这个地址定义的参数是DEBUG_USARTx,所以,main函数中函数Usart_SendByte( DEBUG_USARTx, data)的第一个参数我写错成了pUSARTx。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-13 10:59 , Processed in 0.065914 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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