打印
[STM8]

STM8L051 串口映射到PC5/PC6接收不进中断

[复制链接]
2160|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
justtodo|  楼主 | 2016-11-22 00:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 justtodo 于 2016-11-28 14:54 编辑

卡在这里好多个晚上了。。。程序配置应该没问题,因为TX口发出的数据很正常。示波器看了RX口,有波形,但程序死活不进串口中断。在论坛看到有类似的问题,说的是STM8S103,串口映射到PD5/PD6,正好也是AD通道,于是在程序要把AD的施密特触发器打开,坑。。。那我看了下我的片子,PC5/PC6同时也是SPI和TIM2的复用口。可是我试了几个操作,还是不行啊。求大神指点一二
沙发
justtodo|  楼主 | 2016-11-22 00:20 | 只看该作者
本帖最后由 justtodo 于 2016-11-29 09:10 编辑

已将RX/TX短接,示波器看到波形,也就是之前说的发送没问题(在之前的工作中,外围设备已完全正确收到CPU发送的指令),发送采用的是查询发送模式。
短接后仍无法进入接收中断。且别的几个中断均能正常进入。
现在可以确定的是,端口复用功能配置、串口时钟、总中断、串口配置应该都没问题。
部分代码如下:
void USART_Config(void)
{
   USART_DeInit(USART1);
   CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);         //开时钟
   SYSCFG_REMAPDeInit();                                                            
   SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortC,ENABLE);    //复用PC5,PC6为串口
   USART_Init(USART1, (uint32_t)9600, USART_WordLength_8b, USART_StopBits_1,
                   USART_Parity_No, USART_Mode_Tx|USART_Mode_Rx);         
   GPIO_Init(TXD_GPIO_PORT, TXD_GPIO_PIN, GPIO_Mode_Out_PP_High_Fast);              //高速推挽输出
   GPIO_Init(RXD_GPIO_PORT, RXD_GPIO_PIN, GPIO_Mode_In_PU_No_IT);                    //
  
   USART_ClearITPendingBit(USART1, USART_IT_RXNE);
   USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);          //开接收中断
/* Enable USART */
   USART_Cmd(USART1, ENABLE);
}

struct interrupt_vector const _vectab[] = {
       {0x82, (interrupt_handler_t)_stext}, /* reset */
       {0x82, (interrupt_handler_t)RTC_CSSLSE_IRQHandler},        /* irq4 - RTC/ CSS on LSE interrupt */
       {0x82, (interrupt_handler_t)EXTI0_IRQHandler},                        /* irq8 - External IT PIN0 interrupt */
       {0x82, (interrupt_handler_t)USART1_RX_TIM5_CC_IRQHandler}, /* irq28 */
};


使用特权

评论回复
板凳
justtodo|  楼主 | 2016-11-23 07:38 | 只看该作者
怎么没人呢,求大神指点

使用特权

评论回复
地板
justtodo|  楼主 | 2016-11-24 13:15 | 只看该作者
怎么没人啊。。

使用特权

评论回复
5
500days| | 2016-11-24 18:59 | 只看该作者
如何映射的代码有吗

使用特权

评论回复
6
justtodo|  楼主 | 2016-11-24 19:00 | 只看该作者
500days 发表于 2016-11-24 18:59
如何映射的代码有吗

SYSCFG_REMAPDeInit();
        SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortC,ENABLE);   //映射到PC5/PC6

使用特权

评论回复
7
xmshao| | 2016-11-25 15:35 | 只看该作者
检查下总中断开了没有  enableInterrupts(); 波特率配置是否正确;中断矢量编号是否对了。

使用特权

评论回复
8
justtodo|  楼主 | 2016-11-25 20:57 | 只看该作者
xmshao 发表于 2016-11-25 15:35
检查下总中断开了没有  enableInterrupts(); 波特率配置是否正确;中断矢量编号是否对了。

...

这些都没有问题

使用特权

评论回复
9
Rangar| | 2016-11-27 11:57 | 只看该作者
波特率配置是否正确

使用特权

评论回复
10
justtodo|  楼主 | 2016-11-28 14:56 | 只看该作者
Rangar 发表于 2016-11-27 11:57
波特率配置是否正确

没问题的,串口发送一切正常,外围设备已接收到正确数据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝