打印
[研电赛技术支持]

用C++玩转MCU举例

[复制链接]
662|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caizhiwei|  楼主 | 2023-10-10 13:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 在头文件中定义基类,再定义父类
class SerialFactory
{
public:
    static SerialBase * creatRs485(void);
    static SerialBase * creatRs232(void);
};


2.
class SerialGdRs485 : public SerialBase
{
public:
    SerialGdRs485();
    virtual ~SerialGdRs485();

    virtual void close();
    virtual bool open(uint8_t);

    virtual void setParity(ParityType);
    virtual void setDataBits(DataBitsType);
    virtual void setStopBits(StopBitsType);
    virtual void setBaudRate(BaudRateType);
    virtual void setFlowControl(FlowType);

    virtual int readBlock(char *data, unsigned int maxlen);
    virtual int writeBlock(const char *data, unsigned int len);

private:
    u8 serialPort;
    u8 parityType;
    u8 stopBits;
    u32 baudRates;
};


当然这些驱动函数你需要在底层实现:
//        BSP_RS485_Init( bsp_rs485_port2 );
//        BSP_RS485_BaudRate_Set( bsp_rs485_port2, 115200);
//        BSP_RS485_Parity_Set( bsp_rs485_port2, BSP_UART_PAR_NONE );
//        BSP_RS485_StopBits_Set(bsp_rs485_port2, BSP_UART_STOP_1 );
//        BSP_RS485_Open( bsp_rs485_port2 );


然后在C文件中new一个对象,功能是在一个task中收发rs485数据:
static uint8_t recvBuf[64] = {0};
static SerialBase *pComm[2];
       
/*!
    \brief  主板LED控制任务
*/
void led_task(void *pvParameters)
{
          uint8_t test[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x10, 0x44, 0x06};
  
          BSP_Led_init();
       
        pComm[0] = SerialFactory::creatRs485();
       
        pComm[0]->setBaudRate(BAUD9600);

        pComm[0]->setParity(PAR_NONE);
        /*数据位*/
        pComm[0]->setDataBits(DATA_8);

        pComm[0]->setStopBits(STOP_1); // 停止位

        pComm[0]->open(1);

    for(;;)
    {
        /* toggle LED */
        MainBoard_LED_TOOGLE();   
                BSP_Feed_fwdgt();
        vTaskDelay(500);
               
                pComm[0]->writeBlock((const char *)test, 8);
                pComm[0]->readBlock((char *)recvBuf, 64 );
                  
               
    }
}





使用特权

评论回复
沙发
caizhiwei|  楼主 | 2023-10-10 13:32 | 只看该作者
小伙伴,你们学会了吗?

使用特权

评论回复
板凳
xia00| | 2023-10-22 10:15 | 只看该作者
如果一个团队用C开发,在搭建好的框架内,可能不需要每个人的水平都很高,有个别高手就能解决大部分BUG,但如果一个团队用C++开发,那就要求每个人都要精通C++,不然一个人就能搞死项目。

使用特权

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

本版积分规则

100

主题

857

帖子

14

粉丝