打印
[STM32F1]

使用库函数,以并口方式进行写操作(8位)

[复制链接]
2739|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyzjacky|  楼主 | 2017-9-12 14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xyzjacky 于 2017-9-13 14:08 编辑


有两个函数,都是使用库函数GPIO_WriteBit(注意添加其所在的头文件,#include "stm32f10x_gpio.h"),以并口方式进行8位写操作。

/*************************************************************************************
parallel_wrdata1:此函数是用于IO口编号的低位对应于数据的LSB位
入口参数:
               *GPIOtypex:GPIO的类型,如:GPIOA,GPIOB,使用时可用GPIO_TypeDef*对其强制转换一下
                 GPIOnum:数据LSB位对应的IO编号,如GPIO_Pin_0,使用时注意不要越界了。
                 pdata:写入的并口数据
**************************************************************************************/
void parallel_wrdata1(void *GPIOtypex, INT16U GPIOnum,  INT8U pdata)
{
        INT8U i,j = GPIOnum;
        
        for(i=0;i<8;i++)
        {
                if(pdata&0x01)
                {
                        GPIO_WriteBit(GPIOC, j<<i ,Bit_SET );
                }
                else
                {
                        GPIO_WriteBit(GPIOC, j<<i ,Bit_RESET );
                }
                pdata = pdata >> 1 ;
        }
}


/*************************************************************************************
parallel_wrdata2:此函数是用于IO口编号的低位对应于数据的MSB位
入口参数:
               *GPIOtypex:GPIO的类型,如:GPIOA,GPIOB,使用时可用GPIO_TypeDef*对其强制转换一下
                 GPIOnum:数据LSB位对应的IO编号,如GPIO_Pin_7,使用时注意不要越界了。
                 pdata:写入的并口数据
**************************************************************************************/
void parallel_wrdata2(void *GPIOtypex, INT16U GPIOnum,  INT8U pdata)
{
        INT8U i,j = GPIOnum;
        
        for(i=0;i<8;i++)
        {
                if(pdata&0x01)
                {
                        GPIO_WriteBit(GPIOC, j>>i ,Bit_SET );
                }
                else
                {
                        GPIO_WriteBit(GPIOC, j>>i ,Bit_RESET );
                }
                pdata = pdata >> 1 ;
        }

}






沙发
mcu5i51| | 2017-9-12 14:39 | 只看该作者
调整操作,还是寄存器吧

使用特权

评论回复
板凳
xyzjacky|  楼主 | 2017-9-12 14:48 | 只看该作者
本帖最后由 xyzjacky 于 2017-9-13 09:21 编辑
mcu5i51 发表于 2017-9-12 14:39
调整操作,还是寄存器吧

建议还是用库函数。

1.库函数是官方发布的,是经过大量验证的,极少出BUG,可减少自己一点点从底层寄存器架构时产生的系统性和结构性问题与出错。
2.使用库函数可减少大量的对底层的操作,能节约很多精力。与其一位一位的去数寄存器的位,不如把时间花在如何提高代码质量,以及学习更高级的编程思想,比如RTOS。这对于提高薪资收入有绝对的帮助。
3.现在绝大多数公司都是使用库函数的,而只会使用底层寄存器的写法,会阻碍和别人的对接,进一步的会降低进入先进公司的机会。
4.老式8位的单片机现在已经处于淘汰状态,前几日我看到ST公司发布会的介绍,STM32的出货量去年一年已经达到2亿片,32位处理器淘汰8位的已经是大势所趋。所以为了不让将来处于被动,应该积极的学习先进的知识和方法,而不是固步自封的让自己守在8位机编程那种,对寄存器一位一位的操作方式上。
5.除非你在写8位机这方面有很特殊的技艺,你可以留在8位机编程的思想上,否则还是按实际需要和主流方式来做事才是正道。因为做产品,时间成本是重大因素,官方适时推出了库函数的目的就在于缩短开发的时间和难度。除非你是做学术、做研究。
6.以上论点并非说不再去了解寄存器,寄存器对应于芯片内部的电路,了解仍然是需要的,这对于系统的调试是有帮助的,但是写程序还是建议用库函数来写。

使用特权

评论回复
地板
mmuuss586| | 2017-9-12 17:24 | 只看该作者

谢谢分享;

使用特权

评论回复
5
1988020566| | 2017-9-12 22:34 | 只看该作者

使用特权

评论回复
6
1988020566| | 2017-9-12 22:34 | 只看该作者
直接使用库函数不一样吗?

使用特权

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

本版积分规则

24

主题

112

帖子

4

粉丝