打印
[CW32F030系列]

【CW32F030CxTx测评】接收传感器数据并打印到电脑

[复制链接]
2044|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
@21小跑堂 #申请原创# @21小跑堂
引:
        拿到武汉芯源的开发板有一段时间了,一直想要摸索一下,毕竟是M0芯片,给我的感觉就是,​M0要比M3芯片简单很多。实际还真不是这样,先把坑​填平。

一、资料包下载
        从官网下载资料包文件夹​,如下:

       PSMCU0052为软件开发包,里面的例程很少​;
       CW Programmer V1.53为编程工具;
       CW32系列微控制器软件开发工具入门.PDF为开发工具入门​;
       PS.CW32F030_DFP.1.0.1.pack为keil的支持包
       PSMCU0003.pdf为芯片手册
       PSMCU0048.pdf为开发板使用手册
        安装完PS.CW32F030_DFP.1.0.1.pack的keil支持包,这样在keil里面,就可以找到芯源的​芯片了。


       这样就证明已经安装完成这个资料包了。
       这个芯片吸引人的地方是flash,8KRAM,而且自带CRC算法校验​。​在M0芯片里面,已经很棒了。

        看看资源情况如下,我比较看好的是3个串口,而且可以映射。

       看到资料包里面的文件,感觉少了很多例子代码,在调试完成之后,才发现的,希望不要犯我这种错误。重新进入官网,​查看资料库。

将CW32F030_StdPeriph_Lib下载之后,​可以看见所有的资源都包含了。

二、需要实现的功能
       接收传感器的数据,然后通过​串口在电脑的串口调试助手中打印出来。
三、简单的框图

       从框图上,可以了解到,需要使用到开发板上的两个串口资源,而我们直接挂到传感器上的话,一定会出现很多问题,所以,我们从简单的情况入手,按照以下的框图先调通​开发板上的两个串口。

      而实际的线路板,远没有想象中那么规整。是这样的。
      
四、代码的调试
      我使用的是开发包自带的代码进行调试,​文件的目录如下:
      根目录\CW32F030CxT6 StartKit REV01\PSMCU0052\PSMCU0052 CW32F030 StartKit软件包\StartKit Pack\Soft Example\CW32F030\board_test\
      先将代码进行精简,不用的都删掉,main函数里面只留下如下部分:
int32_t main(void){  //配置RCC    RCC_Configuration();      InitTick( SystemCoreClock );    //48000000    GPIO_Configuration();    UART_Configuration();​    NVIC_Configuration();       while(1)    {       ;    }}
       保持其中的架构不变化,只需要配置里面的GPIO还有UART配置即可。我们使用的是PB6和PB7作为串口3来进行传输数据,使用PA8和PA9作为串口1进行传输数据。需要我们对端口进行重新映射一下。
void GPIO_Configuration(void){      GPIO_InitTypeDefGPIO_InitStructure;    //UART TX RX 复用    PA08_AFx_UART1TXD();                         PA09_AFx_UART1RXD();      ​    GPIO_InitStructure.Pins = GPIO_PIN_8;    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;    GPIO_InitStructure.IT = GPIO_IT_NONE;    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;    GPIO_Init(CW_GPIOA, &GPIO_InitStructure);       GPIO_InitStructure.Pins = GPIO_PIN_9;    GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;    GPIO_InitStructure.IT = GPIO_IT_NONE;    GPIO_Init(CW_GPIOA, &GPIO_InitStructure);       PB06_AFx_UART3TXD();    PB07_AFx_UART3RXD();      GPIO_InitStructure.Pins = GPIO_PIN_6;    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;    GPIO_InitStructure.IT = GPIO_IT_NONE;    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;    GPIO_Init(CW_GPIOB, &GPIO_InitStructure);       GPIO_InitStructure.Pins = GPIO_PIN_7;    GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;    GPIO_InitStructure.IT = GPIO_IT_NONE;    GPIO_Init(CW_GPIOB, &GPIO_InitStructure);  }
       紧跟着需要进行串口的配置,代码如下:
void UART_Configuration(void){    USART_InitTypeDefUSART_InitStructure;       USART_InitStructure.USART_BaudRate = 115200;    USART_InitStructure.USART_Over = USART_Over_16;    USART_InitStructure.USART_Source = USART_Source_PCLK;    USART_InitStructure.USART_UclkFreq = DEBUG_USART_UclkFreq;    USART_InitStructure.USART_StartBit = USART_StartBit_FE;    USART_InitStructure.USART_StopBits = USART_StopBits_1;    USART_InitStructure.USART_Parity = USART_Parity_No ;    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    USART_Init(DEBUG_USARTx, &USART_InitStructure);   ​    NVIC_SetPriority(UART1_IRQn,1);    NVIC_EnableIRQ(UART1_IRQn);​    USART_ClearFlag(DEBUG_USARTx,USART_FLAG_RC);    USART_ClearITPendingBit(DEBUG_USARTx,USART_IT_RC);​    USART_ITConfig(DEBUG_USARTx,USART_IT_RC,ENABLE);      USART_InitStructure.USART_BaudRate = 9600;    USART_InitStructure.USART_Over = USART_Over_16;    USART_InitStructure.USART_Source = USART_Source_PCLK;    USART_InitStructure.USART_UclkFreq = DEBUG_USART_UclkFreq;    USART_InitStructure.USART_StartBit = USART_StartBit_FE;    USART_InitStructure.USART_StopBits = USART_StopBits_1;    USART_InitStructure.USART_Parity = USART_Parity_No ;    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    USART_Init(CW_UART3, &USART_InitStructure);   ​    NVIC_SetPriority(UART3_IRQn,1);    NVIC_EnableIRQ(UART3_IRQn);​    USART_ClearFlag(CW_UART3,USART_FLAG_RC);    USART_ClearITPendingBit(CW_UART3,USART_IT_RC);​    USART_ITConfig(CW_UART3,USART_IT_RC,ENABLE);}
       最后在串口的中断函数中做一个收发逻辑,证明可以实现两个串口的收发工作。代码如下:
void UART1_IRQHandler(void){    if(USART_GetITStatus(CW_UART1,USART_IT_RC) != RESET)    {        USART_ClearITPendingBit(CW_UART1,USART_IT_RC);        USART_SendData(CW_UART1,USART_ReceiveData(CW_UART1));        while(USART_GetFlagStatus(CW_UART1,USART_FLAG_TXE) == RESET);    }}
void UART3_IRQHandler(void){    if(USART_GetITStatus(CW_UART3,USART_IT_RC) != RESET)    {        USART_ClearITPendingBit(CW_UART3,USART_IT_RC);        USART_SendData(CW_UART3,USART_ReceiveData(CW_UART3));        while(USART_GetFlagStatus(CW_UART3,USART_FLAG_TXE) == RESET);    }}
五、串口调试助手输出测试
       将开发板和USB转串口工具分别接到电脑上,查看串口号。
       分别是COM9和COM18              验证成功,证明两个uasrt口已经通了。
六、接上传感器并读数据
       按照框图进行接线,然后在代码中修改读取传感器的协议,并通过串口实时打印到电脑中。这里需要注意的是传感器的AB口不要接反了。
        最终呈现的效果如下:

结:
       至此,开发板串口部分测试完毕,其它部分根据项目的需求进行整理。

使用特权

评论回复
沙发
呐咯密密| | 2022-8-18 14:35 | 只看该作者
代码可使用代码编辑框,就不会出现格式错乱了、

使用特权

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

本版积分规则

认证:资深专家
简介:丰富的嵌入式软硬件开发管理经验; 丰富的项目管理经验并具备敏锐的市场嗅觉; 丰富的产品的供应链资源及工厂管控能力; 具备很强的产品落地经验(从产品企划到产品量产);

107

主题

2307

帖子

9

粉丝