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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版