你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

nucleo 072串口发送不出数据,你想到了没有?

[复制链接]
zhang_123-55168 发布时间:2014-12-21 09:48
本帖最后由 zhang_123-55168 于 2015-1-13 12:16 编辑      收到nucleo有几天了,昨天拿来发送数据竟然发送不出来,莫名其妙。收货当天已经验证了我的板子是好的,可以有数据经虚拟串口发送到pc机。昨晚再次用MBED编程得到hex文件下载还行。上网下了网友发布的那个串口和adc3的 例子还是好的。证明硬件没有问题。那还什么可能性呢?     我是个超级懒的人,再说水平也是差强人意。程序一行一行的实在是看不下去。一个一个从网上找程序试验,中间省略10000字,中间省略一个晚上。   大早起来,没办法,还是查程序吧,串口号了?????????、嗯,真错了。程序是1,nucleo怎么是2呐,无语。都是例子,为啥串口号不一样啊。。。。。。。。。。。。。。。。。。。。。。。  不叨叨了,附上我可以单独直接发数据的例子,灯闪烁。 PS: 例子程序好大,顺便把不必须的文件夹删掉几个。删除半天压缩后还是100M。没办法,单把main.c发来吧

main.rar

下载

3.69 KB, 下载次数: 24

nucleo 072串口发送main文件

收藏 1 评论16 发布时间:2014-12-21 09:48

举报

16个回答
Dylan疾风闪电 回答时间:2015-1-7 20:30:13
用库函数或者直接操作寄存器来控制串口好了。串口的驱动没什么内容的。
  1. /**
  2.   * <b>初始化通用异步收发器。</b>
  3.   * @param  USARTx            串口外设
  4.   * @param  baudrate    波特率
  5.   * @param  parity      校验位。0 None,1 Odd, 2 Even
  6.   * @param  length      数据位个数。带校验7 or 无校验8
  7.   * @param  stopbits    停止位个数。1 1bit, 2 2bits, 3 1.5bits
  8.   * @retval pdFALSE (0) , else return pdTRUE (1).
  9.   * @version            v1.0(2013-12-5)
  10.   * <p>重写函数的功能说明!
  11.   * @author             Dylan
  12.   */
  13. uint8_t BSP_USART_Init(USART_TypeDef* USARTx, u32 baudRate, u8 parity, u8 length, u8 stopBits)
  14. {
  15.         GPIO_InitTypeDef GPIO_InitStructure;
  16.         USART_InitTypeDef USART_InitStructure;
  17.         if (USARTx == USART1)
  18.         {
  19.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  20.                 // GPIO的公共特性
  21.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  22.                 //COM1
  23.                 //USARTx_TX   GPIO_Mode_AF_PP
  24.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  25.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  26.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  27.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Tx);
  28.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Tx) , &GPIO_InitStructure);
  29.                 SetAF_COM1_Tx;//必须选择复用功能
  30.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU
  31.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  32.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  33.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  34.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_Rx);
  35.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_Rx), &GPIO_InitStructure);
  36.                 SetAF_COM1_Rx;//必须选择复用功能
  37.                 //RS485-DE
  38.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  39.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  40.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  41.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM1_DE);
  42.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM1_DE), &GPIO_InitStructure);
  43.                 GPIO_SetBits(RS485_DE);
  44.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  45.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
  46.                 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
  47.         }
  48.         else if (USARTx == USART2)
  49.         {
  50.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  51.                 // GPIO的公共特性
  52.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  53.                 //COM1
  54.                 //USARTx_TX   GPIO_Mode_AF_PP
  55.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  56.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  57.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  58.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Tx);
  59.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Tx) , &GPIO_InitStructure);
  60.                 SetAF_COM2_Tx;//必须选择复用功能
  61.                 //USARTx_RX   GPIO_Mode_AF_PP & IPU
  62.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  63.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  64.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  65.                 GPIO_InitStructure.GPIO_Pin = SPLIT_DEFINE_PIN(ST_COM2_Rx);
  66.                 GPIO_Init(SPLIT_DEFINE_PORT(ST_COM2_Rx), &GPIO_InitStructure);
  67.                 SetAF_COM2_Rx;//必须选择复用功能
  68.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  69.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
  70.                 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
  71.         }
  72.         else
  73.         {
  74.                 return pdFALSE;
  75.                 //#warning "Make sure USARTx is exist ?"
  76.         }
  77.         /* now start init usartx info. */
  78.         switch (parity)
  79.         {
  80.                 case 1://奇
  81.                         USART_InitStructure.USART_Parity = USART_Parity_Odd;
  82.                         if (length == 7)
  83.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  84.                         else
  85.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
  86.                         break;
  87.                 case 2://偶
  88.                         USART_InitStructure.USART_Parity = USART_Parity_Even;
  89.                         if (length == 7)
  90.                                 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  91.                         else
  92.                                 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
  93.                         break;
  94.                 default://0无8位数据位
  95.                         USART_InitStructure.USART_Parity = USART_Parity_No;
  96.                         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  97.                         break;
  98.         }
  99.         switch (stopBits)
  100.         {
  101.                 case 2:
  102.                         USART_InitStructure.USART_StopBits = USART_StopBits_2;
  103.                         break;
  104.                 case 3:
  105.                         USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
  106.                         break;
  107.                 #if defined  (STM32F051) || defined (STM32F042)
  108.                         //null
  109.                 #elif defined (STM32F100) || defined (STM32F101) || defined (STM32F103)
  110.                         case 0://保留STM32F05不支持,STM32F10支持
  111.                                 USART_InitStructure.USART_StopBits = USART_StopBits_0_5;
  112.                                 break;
  113.                 #else
  114.                         #warning "Make sure needn't define STM32F051 etc. ?"
  115.                 #endif
  116.                 default://1
  117.                         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  118.                         break;
  119.         }
  120.         USART_InitStructure.USART_BaudRate = baudRate;
  121.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  122.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  123.         USART_Init(USARTx, &USART_InitStructure);
  124.         USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);
  125.         USART_ITConfig(USARTx, USART_IT_TXE, DISABLE);
  126.         USART_Cmd(USARTx, ENABLE);
  127.        
  128.         return pdTRUE;
  129. }
复制代码
Dylan疾风闪电 回答时间:2015-1-7 20:35:32
发送和接收就是写、读数据寄存器xDR(x=T,R, ' ')。
  1. /**
  2.   * <b>串口向外发送数组。</b>
  3.   * @param  USARTx      COM外设
  4.   * @param pBuff        数组
  5.   * @param length       数据长度
  6.   * @version                        v2.0(2014-11-22)
  7.   * @author                 Dylan
  8.   */
  9. void COM_SendBytes(USART_TypeDef* USARTx, uint8_t* pBuff, uint8_t length)
  10. {
  11.         uint16_t srValue = USARTx->ISR;
  12.        
  13.         while (length--)
  14.         {                       
  15.                 while ((USARTx->ISR & 0xC0) == 0);//等待数据被移到移位寄存器,或者数据发送完成。
  16.                 USARTx->TDR = *pBuff++;
  17.         }
  18. }
复制代码
netlhx 回答时间:2014-12-21 11:50:45
NUCLEO的虚拟串口使用的是USART2,可以参考原理图,上面写的很清楚
zhang_123-55168 回答时间:2014-12-21 11:21:15
本帖最后由 zhang_123-55168 于 2014-12-21 11:24 编辑 基于cube代码生成的工程也可以使用了。串口直接发送,灯闪烁。
wamcncn 回答时间:2014-12-21 12:13:17
你是说例程 NUCLEO串口发不出数据?
lkl0305 回答时间:2014-12-21 15:08:45
板载的串口用的是USART2,这个的确是刚上手时的问题啊。
晓枫VS枯叶 回答时间:2014-12-22 12:19:11
F0的cube库里面有USART的例子,楼主可以打开看看!
sirius65 回答时间:2015-1-7 17:08:23
新手不懂 先收藏学习了
cxtarm 回答时间:2015-1-7 17:28:46
什么串口程序啊,竟然这么大
大秦正声 回答时间:2015-1-7 17:35:50
我的uart1测试正常PA9PA10
aderson 回答时间:2015-1-7 17:46:59
标准库表示可以用。。
taiyangshengqi 回答时间:2015-1-7 20:21:39
楼上说的很对,可以简化程序慢慢调试 确认问题
taiyangshengqi 回答时间:2015-1-7 20:22:05
楼上说的很对,可以简化程序慢慢调试 确认问题
万里-363223 回答时间:2015-1-8 08:34:25
还是不要太懒的好,看清楚程序先
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版