打印

恳请好心人给个STM8L 的UASRT程序

[复制链接]
3651|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiweili010|  楼主 | 2011-3-24 08:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
希望给个,用中断的收发程序,并且希望不是用他给的库函数的,自己写的
请帮助,我拿来参考一下,我是个小菜鸟,哪位大侠有时间帮我一下
沙发
airwill| | 2011-3-24 09:29 | 只看该作者
奇怪, 为什么抵制库函数和里面的例子呢?
难道它写得不够规范, 可读性不好?
要善于学习人家的好的东西哦.

使用特权

评论回复
板凳
香水城| | 2011-3-24 10:36 | 只看该作者
库函数就是为了帮助初学者快速上手,如果想抛开库函数也就是说你已经不是初学者,不是菜鸟了。

不要还没有学会走路,就想学跑。

使用特权

评论回复
地板
ST_ARM| | 2011-3-24 10:58 | 只看该作者
/*------------------------------------------------------------------------------*/
/* ROUTINE NAME: USART1_Init                                                                                                        */
/* INPUT/OUTPUT: None.                                                                                                                        */
/* DESCRIPTION:  Initialize the UART2.                                                                                        */
/*------------------------------------------------------------------------------*/
void USART1_Init(void)
{
        PC_DDR &= (unsigned char)(~0x0C);
        PC_CR1 |= 0x0C;
        PC_CR2 &= (unsigned char)(~0x0C);        // Set PC2 for RX, PC3 for TX as Pull up Input without interrupt


        CLK_PCKENR1 |= 0x20;        // Enable UART1 clock

        SYSCFG_RMPCR1 = 0x00;        // RX and TX remap

        USART1_CR1 = 0x00;        // Set word length bit[5:4] --- 8 bit : 0x00

        USART1_CR3 = 0x00;        // Set the STOP bits
                                // bit 5:4 -   1 bit = 0x00
                                //         0.5 bit = 0x10
                                //           2 bit = 0x20
                                //         1.5 bit = 0x30

        USART1_BRR2 = 0x01;
        USART1_BRR1 = 0x34;// Set the UART1 BRR1 and BRR2 according to UART1_BaudRate value:
                                // 8000000 /   9600 = 0 34 1 H
                                // 8000000 /  19200 = 0 1A 1 H
                                // 8000000 /  38400 = 0 0D 0 H
//        USART1_BRR2 = 0x0B;
//        USART1_BRR1 = 0x08;// Set the UART1 BRR1 and BRR2 according to UART1_BaudRate value:
                        // 8000000 /  57600 = 0 08 B H
                        // 8000000 / 115200 = 0 04 5 H

        USART1_CR2 = 0x0C;        // Enable Transmit and Receive
        USART1_CR2 |= 0x20;        // Enable Receive interrupt
}

/*----------------------------------------------------------------------------
ROUTINE        : USART1_RX_IRQHandler
Discrept: USART1 Receive interrupt function
----------------------------------------------------------------------------*/
@far @interrupt void URX_IRQHandler(void)
{
        RxBuffer[i_UART ++] = USART1_DR;
}

使用特权

评论回复
5
jiweili010|  楼主 | 2011-3-24 13:07 | 只看该作者
谢谢各位的帮助,也谢谢版主的批评,我是在改别人的东西,因为人家用的不是库函数,它是一个产品,通信只是其中的一部分,我想把库函数包含进去,再调用。可是我弄不好,有问题,我又解决不了,所以就想按人家原来的思路弄一下的,我也太懂才出来问的

使用特权

评论回复
6
jiweili010|  楼主 | 2011-3-24 13:08 | 只看该作者
对不起,打错字了,是我不太懂,不好意思

使用特权

评论回复
7
hsbjb| | 2011-3-24 15:52 | 只看该作者
楼主可以先参考一下库函数

使用特权

评论回复
8
jiweili010|  楼主 | 2011-3-24 16:50 | 只看该作者
谢谢你的回复,我已经看了它的库函数,他初始化的设置,还有中断里怎么操作,比如说读数据,清标志位什么的,我差不多都懂得,然后我自己写的,按照他的那种步骤,就是不好用
现在不会进接收中断的,可以进发送中断,但是发回的数据不对,我因为本身就不太懂,所以搞得自己一头雾水,想把库加进去直接用,可是头文件有错误,不是没包含这个,就是找不到另一个头文件,我就更懵了

使用特权

评论回复
9
无冕之王| | 2011-3-25 16:38 | 只看该作者
刚开始学都有一头雾水的阶段

使用特权

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

本版积分规则

0

主题

23

帖子

0

粉丝