STM8L串口中断进不去

2019-09-17来源: eefocus关键字:STM8L  串口中断  配置串口

配置串口

void UART1_Config(void)

{

  /*Enable USART clock */

  CLK_PeripheralClockConfig(CLK_Peripheral_USART, ENABLE);

  

  USART_DeInit();


  USART_Init((uint32_t)9600, USART_WordLength_8D, USART_StopBits_1,

                USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Rx | USART_Mode_Tx));


  /* 使能接收中断 */

  USART_ITConfig(USART_IT_RXNE,ENABLE);


  USART_Cmd(ENABLE);

  

  /* 使能所有中断 */

  enableInterrupts();

}


中断处理

从stm8l10x_it.c中找到INTERRUPT_HANDLER(USART_RX_IRQHandler, 28)函数并填充。


/**

  * @brief  USART RX Interrupt routine.

  * @param  None

  * @retval None

  */

INTERRUPT_HANDLER(USART_RX_IRQHandler, 28)

{

    /* In order to detect unexpected events during development,

       it is recommended to set a breakpoint on the following instruction.

    */

    if(USART_GetITStatus(USART_IT_RXNE) != RESET) {

        if (recv_len > 8) {

            recv_len = 0;

        }

        recv_buff[recv_len++] = USART->DR;

        //USART_SendData8(USART->DR);

        USART_ClearITPendingBit();

    }

}


代码比较简单,就是接收中断被触发后,把数据放到一个接收缓冲区中。


问题

通过调试,发现中断没有被触发,一直进不到中断中。网上也没有相关问题。最后,找到了问题。需要在stm8_interrupt_vector.c文件中把串口接收中断注册到中断向量表中。

找到下面这行代码:


{0x82, NonHandledInterrupt}, /* irq28 */


修改为:


{0x82, USART_RX_IRQHandler}, /* irq28 */



关键字:STM8L  串口中断  配置串口 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic474714.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:个人练习:串口中断和通信
下一篇:stm8s中UART的用法(四种UART中断)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8L 超低功耗八位微控制器简介
超低功耗微控制器平台低功耗的承诺● 从STM8L到STM32L完整的低功耗微控制器平台● 采用最新、超低漏电流的工艺● 极大的改善包括动态和静态的功耗高效率的承诺● 由于采用最新的架构,性能/功耗比达到新高● 运行模式功耗低至:150 μA/MHz● 在低功耗模式下,仅需350nA,SRAM和寄存器数据还可以保留优化的产品分布● 采用通用单片机从8位到32位全覆盖的策略● 针对特殊的应用,提供片上集成的安全特性● 最佳的性价比低功耗的要点超低功耗130nm工艺● 在全温度范围内超低漏电流,工作电压低至1.8V.● 性能和功耗与工作电压密切相关的。低功耗设计● 自动时钟门控● 带有自动进入低功耗功能的闪存● DAC 和ADC工作电压
发表于 2020-07-23
stvd+stm8l051F3(1):stvd一步一步建立stm8l工程项目
stvd版本信息:ST Visual Develop Version 4.3.9单片机型号:stm8l051F3stvd建立stm8l工程项目步骤:1、打开stvd,File->New Workspace...选择Create workspace and projectWorkspace filename中输入工程名,Workspace location输入工程存放路径Project filename输入项目名称;Project location输入项目存放路径,Toolchain选择所用编译器,这里选择STM8 Cosmic;Toolchain root会根据Toolchain的选择自动获取编译器所在路径选中IC型号,双击
发表于 2020-06-17
STM8L 串口通信波特率异常
串口配置 2400/9600/57600/115200 波特率出现异常使用16M时钟的时候,2400和115200不正常,乱码,但是在这中间频率又是好的;修改时钟才能适应不同时钟频率。。。;看寄存器配置是完全没有问题的。经过分析,是因为在配置串口波特率的时候BBR1,BBR2的配置顺序有问题引起的。解决方法:确保先配置BBR2再配置BBR1,否则会出现波特率异常USART1->BBR2 = XXXXX;USART1->BBR1 = XXXXX;
发表于 2020-06-17
STM8L在USART中使用DMA来发送与接收数据
DMA requests */ USART_DMACmd(USART1, USART_DMAReq_TX, ENABLE); USART_DMACmd(USART1, USART_DMAReq_RX, ENABLE);  /* Global DMA Enable */ DMA_GlobalCmd(ENABLE);  /* Enable the USART Tx DMA channel */ DMA_Cmd(DMA1_Channel1, ENABLE); /* Enable the USART Rx DMA channel */ DMA_Cmd(DMA1_Channel2, ENABLE);   
发表于 2020-06-17
<font color='red'>STM8L</font>在USART中使用DMA来发送与接收数据
stm8l151低功耗程序架构,调试心得
最近帮医院做了一款体温记录仪,整个硬件方案资源是:stm8L151 + NTC*2 + EEPROM + 锂电池充电保护电路 + 18mAh纽扣电池;软件逻辑是,每隔一分钟,采样两路温度并保存在EEP里;通过USB转TTL,上位机能够读取,展示温度曲线,最大最小平均值等简单的运算;整个方案很简单,但也走了不少弯路......单片机程序框架之伪代码:void main(void){    CLK_Config();    GPIO_Config();    ADC_Config();    USART_Config();   
发表于 2020-04-27
STM8L151 DAC
最近在做一个关于ADC采集的,同时使用DAC输出的项目,对于DAC输出0V电压做一下总结。STM8L151中内嵌1个 Output Buffer其作用可以用来降低输出阻抗,可以在不添加外部运算放大器时直接驱动外部负载,通过 DAC_CHxCR1来控制其使能或失能。我使用的是PB4 具体的配置代码如下:/********************************RI_IOSwitch_13 ---> PB6RI_IOSwitch_14 ---> PB5RI_IOSwitch_15 ---> PB4配置DAC1 通道1 PB4 ********************************/void
发表于 2020-04-21
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved