一、硬件接口
uart1是接在PA8,PA9,同时也是串口烧录口。原理图如下:
uart使用比较简单,这里不做过多介绍
二、程序编写
初始化代码如下:
- void uart_init(void)
- {
- GPIOA_SetBits(GPIO_Pin_9);
- GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // RXD-配置上拉输入
- GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
-
- UART1_BaudRateCfg(115200);//设置波特率
-
- R8_UART1_FCR = (2<<6) | RB_FCR_TX_FIFO_CLR | RB_FCR_RX_FIFO_CLR | RB_FCR_FIFO_EN; // FIFO打开,触发点4字节
- R8_UART1_LCR = RB_LCR_WORD_SZ;//8bit 数据
- R8_UART1_IER = RB_IER_TXD_EN;//使能输出
- R8_UART1_DIV = 1;
- }
main.c如下:
- #include "CH57x_common.h"
- #include "gpio.h"
- #include "touch_key.h"
- #include "uart.h"
- uint16_t touch_key_value=0;
- uint8_t touch_flag=0;
- int main()
- {
- SystemInit();//初始化系统时钟为32M
- led_init();//led端口初始化
- touch_key_init();//触摸按键初始化
- uart_init();//uart1初始化
- R8_ADC_CONVERT|=(1<<0);//启动转换
- touch_flag=1;
- UART1_SendString((uint8_t*)"CH579 UART1 test...",sizeof("CH579 UART1 test...")-1);
- while(1)
- {
-
- if(((R8_ADC_CONVERT&(1<<4))==0)&&(touch_flag==1))//转换完成
- {
- touch_key_value=R16_ADC_DATA;//读取ad值
- if(touch_key_value<50)//按下
- {
- R32_PB_OUT&=~(1<<1);
- }
- else//松开
- {
- R32_PB_OUT|=(1<<1);
- }
- touch_flag=0;
- }
- if(touch_flag==0)
- {
- R8_ADC_CONVERT|=(1<<0);
- touch_flag=1;
- }
-
- }
- }
运行效果:
|