本帖最后由 fei 于 2012-10-8 16:02 编辑
最近在学模块化程序设计。用STM8S做个串口函数练手。出现问题如下
brr变量定义为U16,结果正常。定义为U32就出问题。测试定位为U32时直接赋值是正常的。就是调用函数传参数的时候出问题。函数功能很简单大致如下:
主程序main()
{
init_IO(); //端口初始化
init_CLK(); //系统时钟初始化
init_UART1(9600); //串口初始化
while(1){UART1_SendChar(0xaa);}
}
在另一个c文件下程序如下:
void init_UART1(U32 brr)
{
//brr=115200; //这里赋值没有问题
U8 BH,BL;
U32 f_sys;
UART1_CR2 =0x00; //禁止发送和接收
UART1_CR1 =0x00; //b5=0允许uart, b2=0禁止校验
UART1_CR3 =0x00; //b5,b4=00,一个停止位
BH=((f_sys/brr)>>8& 0xff); //得高8位
BL=((f_sys/brr)& 0xff); //得低8位
UART1_BRR2=(BH&0xf0)|(BL&0x0f); // BRR2放入16位数的首尾8位
UART1_BRR1=(BH<<4)|(BL>>4); // BRR1放入16位数的中间8位
UART1_CR2 =0x2c; //b2=1允许接收,b3=1允许发送,b5=1允许产生接收
}
|