muxb

  • 2019-08-28
  • 回复了主题帖: 三十而立---一穷二白,重新开始!!!

    楼主有才有魄力,向你致敬,加油!

  • 2019-07-23
  • 回复了主题帖: 颁奖:扫地机器人内部有多复杂?TI E2E 五步为你解密!答题解密赢好礼!

    确认信息无误,感谢TI,感谢EEworld!

  • 2019-07-16
  • 回复了主题帖: 获奖名单:参与 PI 节能小测试,贡献工程师的力量,一起守护地球!

    确认个人信息无误

  • 2019-06-24
  • 发表了主题帖: [GD32E231 DIY大赛]第四篇:汇总贴

    设计名称:动态二维码显示器   作品照片:   作品简介: 生活中二维码随处可见,各种支付,收款,广告,推广等都有二维码的身影,因为手机都可以扫码,大大方便了人们的生活。借助手机扫码,利用gd32ee231开发板的硬件资源,设计一款动态二维码显示器,用户定制并显示设置的信息,方便大家随时扫码,而且可以随时更改信息,灵活方便,很适合广告推广,收款付款等场景。   所需外设:SPI接口LCD显示屏   开发板硬件连接如下图:   各部分功能介绍: 1.PC通过串口连接开发板串口,同时,开发板通过SPI连接LCD显示屏。 2.给MCU烧录固件,PC通过串口shell输入命令和二维码数据后,MCU会将数据生成二维码并显示在LCD显示屏上面。 3.MCU固件其实就是把串口数据转换成0和1的二维码数据,然后送给显示屏,显示屏再按照设置好的像素点,把0和1用白色和黑色分别显示出来,就是我们看到的二维码了。 4.最后,用手机微信扫描二维码,即可显示出来PC输入的数据。   串口源码: void usart0_config(void) {     /* enable USART GPIO clock */     rcu_periph_clock_enable(RCU_GPIOA);       /* enable USART clock */     rcu_periph_clock_enable(RCU_USART0);       /* connect port to USARTx_Tx */     gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);       /* connect port to USARTx_Rx */     gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);       /* configure USART Tx as alternate function push-pull */     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);       /* configure USART Rx as alternate function push-pull */     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);         /* USART configure */     usart_deinit(USART0);     usart_baudrate_set(USART0,    115200);     usart_word_length_set(USART0, USART_WL_8BIT);     usart_stop_bit_set(USART0,    USART_STB_1BIT);     usart_parity_config(USART0,   USART_PM_NONE);       usart_receive_config(USART0,  USART_RECEIVE_ENABLE);     usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);       /* enable the TIMER5 interrupt */     nvic_irq_enable(USART0_IRQn, 0);       /* USART0 INT_RBNE enable */     usart_interrupt_enable(USART0, USART_INT_RBNE);       /* enable USART0 */     usart_enable(USART0); }   LCD接口管脚初始化源码: void gpio_init(void) {          /* enable the LED1 GPIO clock */     rcu_periph_clock_enable(RCU_GPIOA);          /* configure LED1,2,3,4 GPIO port */     gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12);     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12);     /* reset LED1 GPIO pin */     //gpio_bit_reset(GPIOA,GPIO_PIN_7);          gpio_bit_set(GPIOA, GPIO_PIN_7);         //led1          gpio_bit_set(GPIOA,GPIO_PIN_11);        //led3          //gpio_bit_set(GPIOA,GPIO_PIN_12);    //led4            //PA1,PA2,PA3,PA4,PA5,PA6          gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);          gpio_bit_set(GPIOA, GPIO_PIN_1);          gpio_bit_set(GPIOA, GPIO_PIN_2);          gpio_bit_set(GPIOA, GPIO_PIN_3);          gpio_bit_set(GPIOA, GPIO_PIN_4);          gpio_bit_set(GPIOA, GPIO_PIN_5);          gpio_bit_set(GPIOA, GPIO_PIN_6);            //spi0 gpio init          //SPI0_SCK-PB3,SPI0_MISO-PB4,SPI0_MOSI-PB5          rcu_periph_clock_enable(RCU_GPIOB);          gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_3|GPIO_PIN_5);          gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3|GPIO_PIN_5);            //spi1 gpio init          //SPI1_SCK-PB13,SPI1_MISO-PB14,SPI1_MOSI-PB15          gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);          gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);            //PB0,PB1,CS-PB6,RS-PB7          gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_6|GPIO_PIN_7);     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_6|GPIO_PIN_7);          gpio_bit_set(GPIOB, GPIO_PIN_0);          gpio_bit_set(GPIOB, GPIO_PIN_1);          gpio_bit_set(GPIOB, GPIO_PIN_6);          gpio_bit_set(GPIOB, GPIO_PIN_7);            //PB8,PB10,PB11,PB12          gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12);     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12);          gpio_bit_reset(GPIOB, GPIO_PIN_8);          gpio_bit_set(GPIOB, GPIO_PIN_10);          gpio_bit_set(GPIOB, GPIO_PIN_11);          gpio_bit_reset(GPIOB, GPIO_PIN_12);            //TP_CS-PA1,RST-PA2          gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_1|GPIO_PIN_2);     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2|GPIO_PIN_2);          gpio_bit_set(GPIOA, GPIO_PIN_1);          gpio_bit_set(GPIOA, GPIO_PIN_2); }   SPI接口源码: void lcd_port_init(void) {          spi_parameter_struct spi_dev;                   rcu_periph_clock_enable(RCU_SPI0);          rcu_periph_clock_enable(RCU_SPI1);            spi_i2s_deinit(SPI0);          spi_dev.device_mode = SPI_MASTER;          spi_dev.trans_mode = SPI_TRANSMODE_FULLDUPLEX;          spi_dev.frame_size = SPI_FRAMESIZE_8BIT;          spi_dev.nss = SPI_NSS_SOFT;          spi_dev.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;          spi_dev.prescale = SPI_PSC_4;          spi_dev.endian = SPI_ENDIAN_MSB;          spi_init(SPI0, &spi_dev);          spi_enable(SPI0);   }   LCD显示源码: void LCD_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 color) {                   u16 i,j;            for(i=sy; i<=ey; i++){                    for(j=sx; j<=ex; j++){                             LCD_SetPoint(j, i, color);                    }          } }   二维码生成并显示的源码: void show_qrcode(u16 x, u16 y, u16 p, u8 *qrcode_data) {          u8 i,j;            EncodeData((char *)qrcode_data);            for(i=0; i<m_nSymbleSize; i++)          {                    for(j=0; j<m_nSymbleSize; j++)                    {                             if(m_byModuleData[j]==1){                                      LCD_Fill(x+p*i, y+p*j, x+p*(i+1)-1, y+p*(j+1)-1, Black);                             }                    }          } }   测试生成二维码并显示的效果:  

  • 2019-06-19
  • 回复了主题帖: [GD32E231 DIY大赛]第三篇:提交视频和文档

    谢谢管理员的支持!

  • 2019-06-18
  • 发表了主题帖: [GD32E231 DIY大赛]第三篇:提交视频和文档

    所需外设:SPI接口LCD显示屏   开发板硬件连接如下图:   PC通过串口连接开发板串口,同时,开发板通过SPI连接LCD显示屏。   给MCU烧录固件,PC通过串口shell输入命令和二维码数据后,MCU会将数据生成二维码并显示在LCD显示屏上面。   最后,用手机微信扫描二维码,即可显示出来PC输入的数据。

  • 2019-06-04
  • 回复了主题帖: 颁奖:泰克USB主题活动

    已确认,感谢泰克 ! 感谢EEWorld !

  • 2019-05-22
  • 发表了主题帖: [GD32E231 DIY大赛]第二篇:动态二维码显示

    本帖最后由 muxb 于 2019-5-22 22:12 编辑 串口shell搭建完毕后,增加并调通SPI驱动,点亮LCD,然后开始移植二维码编码代码。SPI驱动代码,干脆SPI0,1都开了,随便用。 spi_parameter_struct spi_dev;         uint8_t i;                  rcu_periph_clock_enable(RCU_SPI0);         rcu_periph_clock_enable(RCU_SPI1);         spi_dev.device_mode = SPI_MASTER;         spi_dev.trans_mode = SPI_TRANSMODE_FULLDUPLEX;         spi_dev.frame_size = SPI_FRAMESIZE_8BIT;         spi_dev.nss = SPI_NSS_SOFT;         spi_dev.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;         spi_dev.prescale = SPI_PSC_4;         spi_dev.endian = SPI_ENDIAN_MSB;         spi_init(SPI0, &spi_dev);         spi_enable(SPI0);         spi_init(SPI1, &spi_dev);         spi_enable(SPI1); shell调试增加了命令和参数解析功能,命令-d带参数进去,这个参数就是作为数据,编码成二维码并显示在LCD上。 shell输入命令界面:我输入的-d数据是hello eeworld muxb! LCD显示效果如下: 然后用微信扫码解析出来如下: 本次生成并显示二维码就结束了额, 当然你还可以在输入命令-d你的数据,然后LCD就会显示数据,并且新数据也会产生新的二维码显示出来。 板子连接如下,手机夜间拍照不忍直视,坛友们随便看看吧。 这张LCD太亮了,就成酱紫。 最后,看看资源占用情况,RAM有点紧张了。 Total RO  Size (Code + RO Data)                22704 (  22.17kB)     Total RW  Size (RW Data + ZI Data)              7760 (   7.58kB)     Total ROM Size (Code + RO Data + RW Data)      22988 (  22.45kB) OK,结束了。。。

  • 2019-05-20
  • 回复了主题帖: PCB失效分析及部分案例

    {:1_103:}

  • 2019-05-18
  • 发表了主题帖: [GD32E231 DIY大赛]第一篇:串口shell调试

    板子串口0连接,并点亮板子LED1的效果: 开发板外设接口丰富,第一步调通串口驱动,并移植之前开发好的shell,方便后续功能调试。 shell 界面输入字符并显示: 后续可以在shell中输入命令和数据,交由开发板完成所需功能。

  • 回复了主题帖: 颁奖:泰克USB主题活动

    信息已确认,感谢泰克 ! 感谢EEWorld !

  • 2019-05-10
  • 回复了主题帖: MATLAB APP Designer串口调试工具编写

    厉害{:1_103:}

  • 2019-04-30
  • 回复了主题帖: 详解蓝牙BluetoothGattCallback用法之BLE数据发送

    认真看完了,写的真好,就喜欢你这样的帖子,全是干货,另外请问接收数据的时候,收到哪个buffer里面了,怎么没看到?谢谢。:victory:

  • 2019-04-28
  • 回复了主题帖: helper2416开发板驱动程序创建设备节点不成功

    muxb 发表于 2019-4-28 18:40 谢谢斑竹回复,我继续调试,发现是class_create成功返回,但是device_create(first_drv_class, NULL, MKDEV ...
    不好意思,我找到原因了,要用这个接口创建设备: class_device_create(first_drv_class, NULL, MKDEV(first_drv_major, 0), NULL, "xxx"); 既然新接口编译能过,却不能用,有点疑惑。。。

  • 回复了主题帖: helper2416开发板驱动程序创建设备节点不成功

    谢谢斑竹回复,我继续调试,发现是class_create成功返回,但是device_create(first_drv_class, NULL, MKDEV(first_drv_major, 0), NULL, "xxx");这一句就出错了。 说是内核指针指到了空指针。具体是这个: Unable to handle kernel paging request at virtual address 335e3220 Backtrace: [] (vsnprintf+0x0/0x544) from [] (device_create+0x78/0xb4) 我重新编译内核,烧写内核和rootfiles都还是这样。还请斑竹帮忙指导,谢谢了。

  • 回复了主题帖: STM32峰会大礼包之——爱国者充电宝 拆解图

    原来有两块电池啊,我还以为楼主移植的一块新电池进去了:)

  • 2019-04-02
  • 加入了学习《[高精度实验室] ADC 4 : ADC 的频域指标》,观看 混叠及抗混叠滤波器

  • 加入了学习《[高精度实验室] ADC 4 : ADC 的频域指标》,观看 改善频率指标的方法:相干采样及滤波

  • 加入了学习《[高精度实验室] ADC 4 : ADC 的频域指标》,观看 快速傅立叶变换及加窗函数

  • 加入了学习《[高精度实验室] ADC 4 : ADC 的频域指标》,观看 频域介绍

最近访客

< 1/2 >

统计信息

已有28人来访过

  • 芯币:1439
  • 好友:3
  • 主题:23
  • 回复:221
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言