一、硬件接口
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;
}
}
}
运行效果:
|