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

stm32 l152cct6 串口发不出数据

[复制链接]
zyisme 提问时间:2018-12-25 14:15 /
本帖最后由 zyisme 于 2018-12-28 15:36 编辑

我使用的是stm32 l152cct6 开发板   编译环境为keil5
现在的问题是  我使用串口调试助手  发送数据到开发板  开发板接不到  开发板发送数据串口调试助手也看不到
希望有遇到过此类问题的  可以指点一下  或者指导下我该从哪方面进行查找原因
代码如下
  1. void USART1_Init(u32 baud){
  2.         //结构体变量定义
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         USART_InitTypeDef USART_InitStructure;
  5.         NVIC_InitTypeDef  NVIC_InitStructure;
  6.         
  7.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);//使能端口时钟
  8.         RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口时钟
  9.         

  10.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
  11.         
  12.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
  13.         
  14.         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9;//TX
  15.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
  16.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_40MHz;         
  17.         GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
  18.         GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
  19.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  20.         
  21.         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_10;//RX
  22.         //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
  23.         //GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
  24.         //GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
  25.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  26.         
  27.         USART_InitStructure.USART_BaudRate=baud;
  28.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  29.         USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
  30.         USART_InitStructure.USART_Parity=USART_Parity_No;
  31.         USART_InitStructure.USART_StopBits=USART_StopBits_1;
  32.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  33.         USART_Init(USART1,&USART_InitStructure);
  34.         
  35.         NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
  36.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  37.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;// 中断优先级  抢占式和相应式
  38.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
  39.         NVIC_Init(&NVIC_InitStructure);
  40.         
  41.         USART_Cmd(USART1,ENABLE);
  42.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);  //使用中断方式接受数据
  43.         //USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);  //如果使用DISABLE则使用查询接受方式接受数据
  44.         USART_ClearFlag(USART1,USART_FLAG_TC);
  45.         
  46. }
  47. /*
  48. ********************************************************************************
  49. *        函 数 名: USART1_IRQHandler
  50. *        功能说明: USART1  中断处理函数   函数名不可变
  51. *        形    参: 无
  52. *        返 回 值: 无
  53. ********************************************************************************
  54. */
  55. void USART1_IRQHandler(){
  56.         u8 r=0;
  57.         if(USART_GetITStatus(USART1,USART_IT_RXNE)){
  58.         
  59.                 r=USART_ReceiveData(USART1);
  60.                
  61.         }
  62.         USART_SendData(USART1,r);
  63.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET)
  64.                         ;
  65.         USART_ClearFlag(USART1,USART_FLAG_TC);
  66. }
复制代码


收藏 评论6 发布时间:2018-12-25 14:15

举报

6个回答
jeffhe1 回答时间:2018-12-28 09:45:12
確認一下 ,
1:  stml152 ,GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);  datasheet 是否是 GPIO_AF_USART1 , AF 應該有好幾個復用功能

2: void USART1_IRQHandler(void) , 可以直接這樣寫  USART_SendData(USART1,USART_ReceiveData(USART1)); 試看看

3: 用事波器鉤訊號(鉤PC 出來的Tx , uart 的 Rx) , 用串口送一個 byte, 看有無訊號 , 有訊號代表串口有送出來, 但 程式沒進中斷接收 , 就要看程式哪裡設定有問題
jeffhe1 回答时间:2018-12-28 09:48:08
通常 中斷 enable 會放在上面 , 改個順序看看 , 如下面 :

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_Cmd(USART1, ENABLE);

watershade 回答时间:2018-12-28 10:10:12
一,用万用表测PA9和PA10和外接引脚是通的。如果是nucleo,可能需要看一下跳线了吗。
二,pc发送数据,用示波器看单片机的RX是否有波形。如果有再继续看软件。如果没有检查硬件。
三,尽量不要再中断处理程序写while,尝试把数据搬运出来。在主循环里面发送。(可以进调试看一下是不是卡死到那个中断处理程序了)
wenyangzeng 回答时间:2018-12-28 13:49:15
本帖最后由 wenyangzeng 于 2018-12-28 13:59 编辑

STM32L152CCT6好像没有开发板。楼主是如何与上位机进行USART连接的?先把硬件贴出来看看。
如果是64PIN的板子是连接PA2,PA3,才有虚拟串口可用

无标题.png
zyisme 回答时间:2018-12-28 15:28:04
我的问题是 RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_USART1,ENABLE);串口时钟初始化写错了
谢谢大家
五哥1 回答时间:2018-12-28 15:53:19
有示波器吗,可以看看波形,

所属标签

相似问题

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