串口通讯调不通,各位大侠帮忙看看
本来刚接触STM8 单片机使用的是STM8S103F3P6,想法为想实现两单片机的串口通讯,主机发0x01从机接如果收到0x01亮1指示灯,如果接收不是0x01亮另一指示灯,接收用中断,可两指示灯都没亮啊,根本没进中断,大侠们帮我看看是不是哪里配置有问题。1)硬件很简单主:TX-从RX 主:RX-从:TX中间接一1K电阻,TX RX分别接有5.1K上拉电阻,5V供电
2)发送程序如下:
#include "iostm8s103f3.h"
/************************************/
/***************宏定义***************/
/************************************/
#defineON 1
#defineOFF0
#define POWER_LED (PD_ODR_ODR3) //电源显示PD3
#define HIGHF_LED (PA_ODR_ODR3) //强风显示PA3
#define BAOC_LED (PA_ODR_ODR1) //爆炒显示PA1
#define LOWF_LED (PC_ODR_ODR5) //低风显示PC5
#define LIGHT_LED (PC_ODR_ODR4) //照明显示Pc4
/************************************/
/*************系统初始化*************/
/************************************/
void Sysinit(void)
{
PA_DDR = 0xff;//输出模式
PA_ODR = 0xff;//输出1
PA_CR2 = 0x00;//输出2MHZ
PA_CR1 = 0xff;//推挽输出
PB_DDR = 0xff;//输出模式
PB_ODR = 0xff;//输出1
PB_CR2 = 0x00;//输出2MHZ
PB_CR1 = 0xff;//推挽输出
PC_DDR = 0xff;//PC4输入 AD口
PC_ODR = 0xff;//PC4输出0 其他输出1PC5FTC334C电源初值为1
PC_CR2 = 0x00;//输出2MHZ
PC_CR1 = 0xff;//推挽输出 PC4浮空输入
//PD_DDR = 0xff;//PD1 2 3 4 5 6 7输出模式
//PD_ODR = 0xff;//PD1 2 3 4 5 6 7输出1
// PD_CR2 = 0x00;//输出2MHZ
//PD_CR1 = 0xdf;//PD5 Tx开漏输出
CLK_ICKR = 0x01; //bit 0开HSI时钟
while(!CLK_ICKR_HSIRDY) ; //等待HSI时钟准备就绪
CLK_ECKR = 0x00; //外部时钟关
CLK_CKDIVR = 0x18;//bit4-300:HSI/101:HSI/2 10:HSI/4 11:HSI/8 Tcpu=HSI/8=2MHZ
CLK_PCKENR1 = 0x00;//开TIM4时钟 其他外设时钟关
CLK_PCKENR2 = 0x00;//bit2 BEEP
}
//串口初始化函数
void USART_Init(void)
{
PD_DDR &= ~(1<<5);
PD_CR1 |= (1<<5);
PD_ODR |= (1<<5);
PD_DDR &= ~(1<<6);
PD_CR1 |= (1<<6);
PD_ODR |= (1<<6);
CLK_PCKENR1|= 0x04;//开启串口时钟
UART1_CR2 |= 0x00; //发送禁止
UART1_CR1 = 0x00;//8位数据 不用奇偶校验
UART1_CR3 = 0x00;//1位停止位不开启同步模式
UART1_BRR2 = 0x00;//9600@2MHZ
UART1_BRR1 = 0x0d;//9600@2MHZ
UART1_CR2 |= 0x08; //开启发送使能
}
void Send_Date(uint8_t date)
{
while(!(UART1_SR&0x80)); //等待发送数据寄存器空
UART1_DR = date;
while(!(UART1_SR&0x40)); //等待发送完成
}
void main(void)
{
Sysinit();
USART_Init();
Send_Date(0x01);
//if(UART1_SR & 0x80){HIGHF_LED = 0;}
while(1) ;
}
3)接收程序如下:
#include "iostm8s103f3.h"
/************************************/
/***************宏定义***************/
/************************************/
#defineON 1
#defineOFF0
#define POWER_LED (PD_ODR_ODR3) //电源显示PD3
#define HIGHF_LED (PA_ODR_ODR3) //强风显示PA3
#define LOWF_LED (PC_ODR_ODR5) //低风显示PC5
#define LIGHT_LED (PC_ODR_ODR4) //照明显示Pc4
uint8_t temp;
/************************************/
/*************系统初始化*************/
/************************************/
void Sysinit(void)
{
PA_DDR = 0xff;//输出模式
PA_ODR = 0xff;//输出1
PA_CR2 = 0x00;//输出2MHZ
PA_CR1 = 0xff;//推挽输出
PB_DDR = 0xff;//输出模式
PB_ODR = 0xff;//输出1
PB_CR2 = 0x00;//输出2MHZ
PB_CR1 = 0xff;//推挽输出
PC_DDR = 0xff;//PC4输入 AD口
PC_ODR = 0xff;//PC4输出0 其他输出1PC5FTC334C电源初值为1
PC_CR2 = 0x00;//输出2MHZ PD6禁止外部中断
PC_CR1 = 0xff;//推挽输出 PD6带上拉电阻输入
//PD_DDR = 0xbf;//PD6 输入模式Rx 引脚
//PD_ODR = 0xff;//PD1 2 3 4 5 6 7输出1
// PD_CR2 = 0x00;//输出2MHZ
//PD_CR1 = 0xff;//推挽输出
CLK_ICKR = 0x01; //bit 0开HSI时钟
while(!CLK_ICKR_HSIRDY) ; //等待HSI时钟准备就绪
CLK_ECKR = 0x00; //外部时钟关
CLK_CKDIVR = 0x18;//bit4-300:HSI/101:HSI/2 10:HSI/4 11:HSI/8 Tcpu=HSI/8=2MHZ
CLK_PCKENR1 = 0xff;//开TIM4时钟 其他外设时钟关
CLK_PCKENR2 = 0xff;//bit2 BEEP
}
void Delay_us(uint16_t us)
{
while(us--) ;
}
void Delay_ms(uint16_t ms)
{
uint16_t i;
while(ms--)
{
for(i=0;i<1420;i++)
{
;
}
}
}
//串口初始化函数
void USART_Init(void)
{
//CLK_PCKENR1|= 0x04;//开启串口时钟
PD_DDR &= ~(1<<5);
PD_CR1 |= (1<<5);
PD_ODR |= (1<<5);
PD_DDR &= ~(1<<6);
PD_CR1 |= (1<<6);
PD_ODR |= (1<<6);
UART1_CR1 = 0x00;//8位数据 不用奇偶校验
UART1_CR3 = 0x00;//1位停止位不开启同步模式
UART1_BRR2 = 0x00;//9600@2MHZ
UART1_BRR1 = 0x0d;//9600@2MHZ
UART1_CR2 = 0x24; //接收中断使能开启接收使能
asm("rim") ; //允许CPU全局中断STVD中为_asm("rim"); 开全局中断
}
#pragma vector=UART1_R_RXNE_vector
__interrupt void UART1_R_RXNE_vector_IRQHandler(void)
{
temp = UART1_DR;
if(temp == 0x01) {HIGHF_LED = 0;}
else {LOWF_LED = 0;}
}
void main(void)
{
Sysinit();
USART_Init();
// LIGHT_LED = 0;
while(1);
}
仿真看一下 先用串口调试助手每个单独调调吧。。。 anger0925 发表于 2015-9-24 09:30
仿真看一下
IAR仿真不太会用,有类似的资料没??有的话发我一份!!谢谢!! JackieLaura 发表于 2015-9-24 11:21
先用串口调试助手每个单独调调吧。。。
不是开发板,是自己动手弄得两块板子,没用232芯片和PL2303芯片............. 呵呵,实在不行就老老实实的照抄例程吧。 HYD_hongyundong 发表于 2015-9-24 11:52
IAR仿真不太会用,有类似的资料没??有的话发我一份!!谢谢!!
IAR的资料很多 HYD_hongyundong 发表于 2015-9-24 11:53
不是开发板,是自己动手弄得两块板子,没用232芯片和PL2303芯片.............
usb转ttl线搞根,先一个个单独调吧,实在不行,先试试楼上的方法,验证硬件有没有问题 JackieLaura 发表于 2015-9-25 08:59
usb转ttl线搞根,先一个个单独调吧,实在不行,先试试楼上的方法,验证硬件有没有问题 ...
好的,谢谢!!我试试...........
页:
[1]