提示:文章写完后,目次可以主动天生,怎样天生可参考右边的资助文档
1、通讯的串行和并行
1.串口采取发送数据代码并用printf重代码
- #include <stdint.h>
- #include <stdio.h>
- #include "gd32f30x.h"
- static void Usb2ComGpioInit(void)
- {
- rcu_periph_clock_enable(RCU_GPIOA);
- //配置TX引脚对于的管脚为复用推挽输出模式,输出模式有复用和一般模式的区别,而输出无这样的的区别。
- gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);//发送引脚
- //配置TX引脚对于的管脚为上拉输入或者浮空输入
- //why 串口默认输出高电平,读取数据是,空闲状态和数据起始位都为低电平。
- gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_10MHZ, GPIO_PIN_10);//接受引脚
- }
- static void Usb2ComUartInit(uint32_t baudRate)
- {
- /* 使能UART时钟;*/
- rcu_periph_clock_enable(RCU_USART0);
-
- /* 复位UART;*/
- usart_deinit (USART0);
-
- /* 通过USART_CTL0寄存器的WL设置字长;*/
- /* 初始默认WL字长为8bit*/
- usart_word_length_set(USART0, USART_WL_8BIT);
-
- /* 通过USART_CTL0寄存器的PCEN设置校验位;*/
- /* 初始默认无校验位*/
- usart_parity_config(USART0, USART_PM_NONE);
-
- /* 在USART_CTL1寄存器中写STB[1:0]位来设置停止位的长度;*/
- /*初始默认停止位1bit 可选0.5 1 1.5 2*/
- usart_stop_bit_set(USART0, USART_STB_1BIT);
-
- /* 在USART_BAUD寄存器中设置波特率;*/
- usart_baudrate_set(USART0, baudRate);
-
- /* 在USART_CTL0寄存器中设置TEN位,使能发送功能;*/
- usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
-
- /* 在USART_CTL0寄存器中置位UEN位,使能UART;*/
- usart_enable(USART0);
- }
- void Usb2ComTest(void)
- {
- for (uint8_t i = 0; i <= 250; i++)
- {
- usart_data_transmit(USART0, i);//发送数据
- while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));
- //当TBE为0,等待,当TBE为0时,表示TXR数据寄存器有数据,需要继续等待
- //当TBE为1,跳出循环,表示TXR数据寄存器无数据,可以继续向位移寄存器下一个数据。
- ////总结:RENE和TBE标志位为1是都表示已经准备好的意思,可以开始接受和发送下一个数据。TC为1时表示数据发送完毕。
- }
- // while (RESET == usart_flag_get(g_uartHwInfo.uartNo, USART_FLAG_TC));
- // usart_transmit_config(g_uartHwInfo.uartNo, USART_TRANSMIT_DISABLE);
- //TC为1时,跳出循环,表示位移寄存器数据(无数据),即发送完毕。
- //TC为0时,等待,表示位移寄存器数据有数据,需要继续等待。
- }
- /**
- ***********************************************************
- * @brief USB转串口硬件初始化
- * @param
- * @return
- ***********************************************************
- */
- void Usb2ComDrvInit(void)
- {
- Usb2ComGpioInit();
- Usb2ComUartInit(115200);
- }
- /**
- ***********************************************************
- * @brief printf函数默认打印输出到显示器,如果要输出到串口,
- 必须重新实现fputc函数,将输出指向串口,称为重定向
- * @param
- * @return
- ***********************************************************
- */
- int fputc(int ch, FILE *f)
- {
- usart_data_transmit(USART0, (uint8_t)ch);
- while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));
- return ch;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |