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

stm32fo72用IDLE接收不定长数据

[复制链接]
xp3 提问时间:2018-3-8 09:39 /
求助  stm32fo72用IDLE接收不定长数据,

点评

fo72,可以不要写这么随意吗  发表于 2018-3-8 10:24
收藏 评论13 发布时间:2018-3-8 09:39

举报

13个回答
xp3 回答时间:2018-3-8 09:43:46
       
串口初始化
USART_InitTypeDef usart_init_structure;
        GPIO_InitTypeDef gpio_init_structure;
        NVIC_InitTypeDef nvic_init_structure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART4, ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_4);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_4);
       
        gpio_init_structure.GPIO_Pin = (GPIO_Pin_0| GPIO_Pin_1);  
  gpio_init_structure.GPIO_Mode = GPIO_Mode_AF;
  gpio_init_structure.GPIO_OType = GPIO_OType_PP;
  gpio_init_structure.GPIO_Speed = GPIO_Speed_50MHz;
  gpio_init_structure.GPIO_PuPd= GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &gpio_init_structure);

        usart_init_structure.USART_BaudRate=115200;
        usart_init_structure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        usart_init_structure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
        usart_init_structure.USART_Parity = USART_Parity_No;
        usart_init_structure.USART_StopBits = USART_StopBits_1;
        usart_init_structure.USART_WordLength = USART_WordLength_8b;
        USART_Init(USART4,&usart_init_structure);
       
        USART_ITConfig(USART4,USART_IT_RXNE,ENABLE);
        USART_ITConfig(USART4,USART_IT_TC,ENABLE);
        USART_ITConfig(USART4,USART_IT_IDLE,ENABLE);
        USART_Cmd(USART4,ENABLE);
               
        nvic_init_structure.NVIC_IRQChannel=USART3_4_IRQn;
        nvic_init_structure.NVIC_IRQChannelPriority=1;
        nvic_init_structure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&nvic_init_structure);
xp3 回答时间:2018-3-8 09:44:09
已经开启了IDLE中断
xp3 回答时间:2018-3-8 09:44:46
void USART3_4_IRQHandler(void)
{
        uint8_t Clear=Clear;
        if(USART_GetITStatus(USART4, USART_IT_RXNE) != RESET)
        {
               
               
                Recvbuffer4[USART4_RX_STA++]=USART4->RDR;

                       

        }
        else if(USART_GetITStatus(USART4, USART_IT_IDLE) != RESET)
        {
          Clear=USART4->ISR;
                Clear=USART4->RDR ;
               
          Recivestate=1;

        }
xp3 回答时间:2018-3-8 09:45:08
中断接收
xp3 回答时间:2018-3-8 09:56:05
数据就接收不了了
jjbboox 回答时间:2018-3-8 10:21:17
不要elseif
把两段if 分开试一下。很可能这两个标志位是同时产生的,你用elseif的话,下面的IDLE永远进不去。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-3-8 10:22:39

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

xp3 回答时间:2018-3-8 10:53:42
jjbboox 发表于 2018-3-8 10:21
不要elseif
把两段if 分开试一下。很可能这两个标志位是同时产生的,你用elseif的话,下面的IDLE永远进不去 ...

还是不行啊
jjbboox 回答时间:2018-3-8 11:12:18
本帖最后由 jjbboox 于 2018-3-8 11:15 编辑
我是用HAL库实现的,可能和你不太一样。
12下一页

所属标签

相似问题

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